Bug 320790 NPE in ContributionsAnalyzer
This is the I20100723-2001 build and I somehow managed to get into a state where all context menus result in this NPE! java.lang.NullPointerException at org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer.gatherMenuContributions(ContributionsAnalyzer.java:97) at org.eclipse.e4.ui.workbench.swt.modeling.MenuServiceFilter.showMenu(MenuServiceFilter.java:134) at org.eclipse.e4.ui.workbench.swt.modeling.MenuServiceFilter.handleMenu(MenuServiceFilter.java:117) at org.eclipse.e4.ui.workbench.swt.modeling.MenuServiceFilter.handleEvent(MenuServiceFilter.java:103) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1031) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3775) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1367) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1390) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1371) at org.eclipse.swt.widgets.Menu.menuWillOpen(Menu.java:689) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5030) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:4483) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:4739) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.nextEventMatchingMask(NSApplication.java:85) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3271)
bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ContributionsAnalyzer.java
return (ToolBarKey) contribution.getWidget();
		}
		return new ToolBarKey(contribution);
	}
	private static TrimKey getKey(MTrimContribution contribution) {
		if (contribution.getWidget() instanceof TrimKey) {
			return (TrimKey) contribution.getWidget();
		}
		return new TrimKey(contribution);
	}
	public static void printContributions(ArrayList<MMenuContribution> contributions) {
		for (MMenuContribution c : contributions) {
			trace("\n" + c, null); 
			for (MMenuElement element : c.getChildren()) {
				printElement(1, element);
			}
		}
	}
	private static void printElement(int level, MMenuElement element) {
		StringBuilder buf = new StringBuilder();
		for (int i = 0; i < level; i++) {
			buf.append('\t');
		}
		buf.append(element.toString());
		trace(buf.toString(), null);
		if (element instanceof MMenu) {
			for (MMenuElement item : ((MMenu) element).getChildren()) {
				printElement(level + 1, item);
			}
		}