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
*/
		@Override
		public boolean equals(Object obj) {
			if (!(obj instanceof Key)) {
				return false;
			}
			Key other = (Key) obj;
			Object exp1 = vexp == null ? null : vexp.getCoreExpression();
			Object exp2 = other.vexp == null ? null : other.vexp.getCoreExpression();
			return Util.equals(parentId, other.parentId) && Util.equals(position, other.position)
					&& getSchemeTag() == other.getSchemeTag() && Util.equals(exp1, exp2);
		}
		@Override
		public int hashCode() {
			if (hc == -1) {
				Object exp1 = vexp == null ? null : vexp.getCoreExpression();
				hc = Util.hashCode(parentId);
				hc = hc * 87 + Util.hashCode(position);
				hc = hc * 87 + getSchemeTag();
				hc = hc * 87 + Util.hashCode(exp1);
			}
			return hc;
		}
		@Override
		public String toString() {
			return getClass().getName() + " " + parentId + "--" + position 
					+ "--" + getSchemeTag() + "--" + vexp; 
		}
	}
	static class MenuKey extends Key {