diff options
Diffstat (limited to 'bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NestableHandlerService.java')
-rw-r--r-- | bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NestableHandlerService.java | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NestableHandlerService.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NestableHandlerService.java index 4576a75865a..7558f52117c 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NestableHandlerService.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NestableHandlerService.java @@ -11,8 +11,6 @@ package org.eclipse.ui.internal.handlers; -import java.util.Iterator; - import org.eclipse.core.expressions.Expression; import org.eclipse.ui.handlers.IHandlerActivation; import org.eclipse.ui.handlers.IHandlerService; @@ -61,16 +59,17 @@ public final class NestableHandlerService extends SlaveHandlerService implements return; } - final Iterator localActivationItr = localActivationsToParentActivations - .keySet().iterator(); - while (localActivationItr.hasNext()) { - final Object object = localActivationItr.next(); + Object[] localActivations = localActivationsToParentActivations.keySet().toArray(); + for (int i = 0; i < localActivations.length; i++) { + final Object object = localActivations[i]; if (object instanceof IHandlerActivation) { final IHandlerActivation localActivation = (IHandlerActivation) object; - super.doActivation(localActivation); + // Ignore activations that have been cleared since the copy + // was made. + if (localActivationsToParentActivations.containsKey(localActivation)) + super.doActivation(localActivation); } } - active = true; } @@ -91,11 +90,11 @@ public final class NestableHandlerService extends SlaveHandlerService implements deactivateHandlers(parentActivations); parentActivations.clear(); - final Iterator localActivationItr = localActivationsToParentActivations - .keySet().iterator(); - while (localActivationItr.hasNext()) { - final Object object = localActivationItr.next(); - localActivationsToParentActivations.put(object, null); + Object[] localActivations = localActivationsToParentActivations.keySet().toArray(); + for (int i = 0; i < localActivations.length; i++) { + final Object object = localActivations[i]; + if (localActivationsToParentActivations.containsKey(object)) + localActivationsToParentActivations.put(object, null); } active = false; |