Bug 578964 - fix NPE in MenuManagerHideProcessor

Change-Id: I5462b3e33c45fe58d9da9a0a1ff17673e120b2a8
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui/+/192363
Reviewed-by: Jörg Kubitz <jkubitz-eclipse@gmx.de>
Tested-by: Platform Bot <platform-bot@eclipse.org>
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 ac1b804..1314d2a 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
@@ -92,9 +92,15 @@
 
 		if (!menu.isDisposed()) {
 			menu.getDisplay().asyncExec(() -> {
+				if (menu.isDisposed()) {
+					return; // may be meanwhile disposed
+				}
 				for (Entry<MDynamicMenuContribution, ArrayList<MMenuElement>> entry : toBeHidden.entrySet()) {
 					MDynamicMenuContribution currentMenuElement = entry.getKey();
 					Object contribution = currentMenuElement.getObject();
+					if (contribution != null) {
+						continue; // avoid NPE (Bug 578964)
+					}
 					IEclipseContext dynamicMenuContext = EclipseContextFactory.create();
 
 					ArrayList<MMenuElement> mel = entry.getValue();
@@ -103,7 +109,7 @@
 					dynamicMenuContext.set(MDynamicMenuContribution.class, currentMenuElement);
 					IEclipseContext parentContext = modelService.getContainingContext(currentMenuElement);
 					ContextInjectionFactory.invoke(contribution, AboutToHide.class, parentContext,
-							dynamicMenuContext, null);
+							dynamicMenuContext, null); // contribution==null => NPE (Bug 578964)
 					dynamicMenuContext.dispose();
 					// remove existing entries for this dynamic
 					// contribution item if there are any