Bug 257094 [Markers] NPE in MarkerHelpRegistry
We've been analyzing user .log files to root out common problems and clean up unnecessary errors. Since this is done offline I have no further info on what the user(s) were doing at the time, but the following NPE was hit 77 times by our users during the month of October: !ENTRY org.eclipse.jface 4 2 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface". !STACK 0 java.lang.NullPointerException at org.eclipse.ui.internal.ide.registry.MarkerHelpRegistry.hasResolution(Unknown Source) at org.eclipse.ui.internal.ide.registry.MarkerHelpRegistry.hasResolutions(Unknown Source) at org.eclipse.ui.views.markers.MarkerField.annotateImage(Unknown Source) at org.eclipse.ui.internal.views.markers.MarkerProblemSeverityAndMessageField.update(Unknown Source) at org.eclipse.ui.internal.views.markers.MarkerColumnLabelProvider.update(Unknown Source) at org.eclipse.jface.viewers.ViewerColumn.refresh(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(Unknown Source) at org.eclipse.core.runtime.SafeRunner.run(Unknown Source) at org.eclipse.core.runtime.Platform.run(Unknown Source) at org.eclipse.ui.internal.JFaceUtil$1.run(Unknown Source) at org.eclipse.jface.util.SafeRunnable.run(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(Unknown Source) at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(Unknown Source) at org.eclipse.core.runtime.SafeRunner.run(Unknown Source) at org.eclipse.core.runtime.Platform.run(Unknown Source) at org.eclipse.ui.internal.JFaceUtil$1.run(Unknown Source) at org.eclipse.jface.util.SafeRunnable.run(Unknown Source) at org.eclipse.jface.viewers.StructuredViewer.updateItem(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(Unknown Source) at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(Unknown Source) at org.eclipse.jface.viewers.TreeViewer.createChildren(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer.internalExpandToLevel(Unknown Source) at org.eclipse.jface.viewers.AbstractTreeViewer.expandToLevel(Unknown Source) at org.eclipse.ui.internal.views.markers.MarkersTreeViewer.expandToLevel(Unknown Source) at org.eclipse.ui.internal.views.markers.ExtendedMarkersView.reexpandCategories(Unknown Source) at org.eclipse.ui.internal.views.markers.ExtendedMarkersView$12.runInUIThread(Unknown Source) at org.eclipse.ui.progress.UIJob$1.run(Unknown Source) at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source) at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source) at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source) at org.eclipse.ui.internal.Workbench.runEventLoop(Unknown Source) at org.eclipse.ui.internal.Workbench.runUI(Unknown Source) at org.eclipse.ui.internal.Workbench.access$4(Unknown Source) at org.eclipse.ui.internal.Workbench$5.run(Unknown Source) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Unknown Source) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Unknown Source) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(Unknown Source) at org.eclipse.ui.internal.ide.application.IDEApplication.start(Unknown Source) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(Unknown Source) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(Unknown Source) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(Unknown Source) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(Unknown Source) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Unknown Source) at org.eclipse.equinox.launcher.Main.basicRun(Unknown Source) at org.eclipse.equinox.launcher.Main.run(Unknown Source) at org.eclipse.equinox.launcher.Main.main(Unknown Source)
bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistry.java
/*
		 * (non-Javadoc) Method declared on Object.
		 */
		public boolean equals(Object o) {
			if (!(o instanceof QueryComparator)) {
				return false;
			}
			return true;
		}
		/*
		 * (non-Javadoc) Method declared on Comparator.
		 */
		public int compare(Object o1, Object o2) {
			
			MarkerQuery q1 = (MarkerQuery) o1;
			MarkerQuery q2 = (MarkerQuery) o2;
			int size1 = q1.getAttributes().length;
			int size2 = q2.getAttributes().length;