Bug 469581 - Dynamic Menu Contributions are never be invoked

Change-Id: I90fb469f574a892a86f302631528e4d676cb6815
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java
index ac04261..dd5ed52 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java
@@ -9,7 +9,6 @@
  *     IBM Corporation - initial API and implementation
  *     Marco Descher <marco@descher.at> - Bug 403081, 403083
  *     Bruce Skingle <Bruce.Skingle@immutify.com> - Bug 442570
- *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 472654
  *******************************************************************************/
 package org.eclipse.e4.ui.workbench.renderers.swt;
 
@@ -71,36 +70,39 @@
 	 *
 	 */
 	private void processDynamicElements(final MenuManager menuManager, Menu menu, final MMenu menuModel) {
-		// We need to make a copy of the dynamic items which need to be removed
-		// because the actual remove happens asynchronously.
-		final Map<MDynamicMenuContribution, ArrayList<MMenuElement>> toBeHidden = new HashMap<>();
-
-		for (MMenuElement currentMenuElement : menuModel.getChildren()) {
-			if (currentMenuElement instanceof MDynamicMenuContribution) {
-
-				final Map<String, Object> storageMap = currentMenuElement.getTransientData();
-				@SuppressWarnings("unchecked")
-				ArrayList<MMenuElement> mel = (ArrayList<MMenuElement>) storageMap
-						.get(MenuManagerShowProcessor.DYNAMIC_ELEMENT_STORAGE_KEY);
-
-				toBeHidden.put((MDynamicMenuContribution) currentMenuElement, mel);
-
-				// make existing entries for this dynamic contribution item
-				// invisible if there are any
-				if (mel != null && mel.size() > 0) {
-
-					for (MMenuElement item : mel) {
-						item.setVisible(false);
-					}
-				}
-				currentMenuElement.getTransientData().remove(MenuManagerShowProcessor.DYNAMIC_ELEMENT_STORAGE_KEY);
-			}
-		}
-
 		if (!menu.isDisposed()) {
 			menu.getDisplay().asyncExec(new Runnable() {
 				@Override
 				public void run() {
+					// We need to make a copy of the dynamic items which need to
+					// be removed
+					// because the actual remove happens asynchronously.
+					final Map<MDynamicMenuContribution, ArrayList<MMenuElement>> toBeHidden = new HashMap<>();
+
+					for (MMenuElement currentMenuElement : menuModel.getChildren()) {
+						if (currentMenuElement instanceof MDynamicMenuContribution) {
+
+							final Map<String, Object> storageMap = currentMenuElement.getTransientData();
+							@SuppressWarnings("unchecked")
+							ArrayList<MMenuElement> mel = (ArrayList<MMenuElement>) storageMap
+									.get(MenuManagerShowProcessor.DYNAMIC_ELEMENT_STORAGE_KEY);
+
+							toBeHidden.put((MDynamicMenuContribution) currentMenuElement, mel);
+
+							// make existing entries for this dynamic
+							// contribution item
+							// invisible if there are any
+							if (mel != null && mel.size() > 0) {
+
+								for (MMenuElement item : mel) {
+									item.setVisible(false);
+								}
+							}
+							currentMenuElement.getTransientData()
+									.remove(MenuManagerShowProcessor.DYNAMIC_ELEMENT_STORAGE_KEY);
+						}
+					}
+
 					for (Entry<MDynamicMenuContribution, ArrayList<MMenuElement>> entry : toBeHidden.entrySet()) {
 						MDynamicMenuContribution currentMenuElement = entry.getKey();
 						Object contribution = currentMenuElement.getObject();