Community
Participate
Working Groups
F2 integration build 0607 - retrieve the org.eclipse.swt project from dev.eclipse.org into your workspace (take HEAD) - in the Resource navigator rename org.eclipse.swt's contained file .classpath_win32 to .classpath - Eclipse does a compilation - Window -> Open Perspective -> Java - in the packages viewer expand the org.eclipse.swt tree - select Eclipse SWT/win32 - right-click -> Open Type Hierarchy - Hierarchy view comes to front but never populates, and progress monitor in bottom-right goes on indefinitely
Can reproduce and the reason is a NullPointerException during the type hierarchy computation (see below). Moving to JDT CORE should investigate for F3. java.version=1.3.0_02 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US Command-line arguments: -os win32 -ws win32 -arch x86 -install file:D:/eclipse/20020607/eclipse/ !ENTRY org.eclipse.jdt.ui 4 1 Jun 08, 2002 23:12:50.841 !MESSAGE Internal Error !STACK 1 org.eclipse.jdt.core.JavaModelException[4]: java.lang.NullPointerException at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.removeType (RegionBasedTypeHierarchy.java:140) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.removeType (RegionBasedTypeHierarchy.java:134) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:111) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:107) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:115) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:99) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedHierarchyBuilder.build (RegionBasedHierarchyBuilder.java:51) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.compute (RegionBasedTypeHierarchy.java:73) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh (TypeHierarchy.java:1131) at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation (CreateTypeHierarchyOperation.java:69) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:307) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:515) at org.eclipse.jdt.internal.core.JavaModelManager.runOperation (JavaModelManager.java:1181) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:574) at org.eclipse.jdt.internal.core.JavaProject.newTypeHierarchy (JavaProject.java:1597) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.doHierarchyRefr esh(TypeHierarchyLifeCycle.java:173) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.access$0 (TypeHierarchyLifeCycle.java:133) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle$1.run (TypeHierarchyLifeCycle.java:109) at org.eclipse.jface.operation.ModalContext.runInCurrentThread (ModalContext.java:299) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:249) at org.eclipse.jface.window.ApplicationWindow$1.run (ApplicationWindow.java:394) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:64) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:391) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1068) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.ensureRefreshed TypeHierarchy(TypeHierarchyLifeCycle.java:117) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.updateInput (TypeHierarchyViewPart.java:406) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.setInputElement (TypeHierarchyViewPart.java:392) at org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil.openInViewPart (OpenTypeHierarchyUtil.java:120) at org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil.open (OpenTypeHierarchyUtil.java:97) at org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run (OpenTypeHierarchyAction.java:120) at org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run (OpenTypeHierarchyAction.java:112) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun (SelectionDispatchAction.java:178) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run (SelectionDispatchAction.java:156) at org.eclipse.jface.action.Action.runWithEvent(Action.java:749) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection (ActionContributionItem.java:407) at org.eclipse.jface.action.ActionContributionItem.handleWidgetEvent (ActionContributionItem.java:361) at org.eclipse.jface.action.ActionContributionItem.access$0 (ActionContributionItem.java:352) at org.eclipse.jface.action.ActionContributionItem$ActionListener.handleEvent (ActionContributionItem.java:47) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:75) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:825) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:1527) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1289) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1177) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1160) at org.eclipse.core.internal.boot.InternalBootLoader.run (InternalBootLoader.java:739) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462) at java.lang.reflect.Method.invoke(Native Method) at org.eclipse.core.launcher.Main.basicRun(Main.java:248) at org.eclipse.core.launcher.Main.run(Main.java:697) at org.eclipse.core.launcher.Main.main(Main.java:530) !ENTRY org.eclipse.jdt.core 4 4 Jun 08, 2002 23:12:50.841 !MESSAGE !STACK 0 java.lang.NullPointerException at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.removeType (RegionBasedTypeHierarchy.java:140) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.removeType (RegionBasedTypeHierarchy.java:134) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:111) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:107) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:115) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.pruneDeadBranch es(RegionBasedTypeHierarchy.java:99) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedHierarchyBuilder.build (RegionBasedHierarchyBuilder.java:51) at org.eclipse.jdt.internal.core.hierarchy.RegionBasedTypeHierarchy.compute (RegionBasedTypeHierarchy.java:73) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh (TypeHierarchy.java:1131) at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation (CreateTypeHierarchyOperation.java:69) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:307) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:515) at org.eclipse.jdt.internal.core.JavaModelManager.runOperation (JavaModelManager.java:1181) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:574) at org.eclipse.jdt.internal.core.JavaProject.newTypeHierarchy (JavaProject.java:1597) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.doHierarchyRefr esh(TypeHierarchyLifeCycle.java:173) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.access$0 (TypeHierarchyLifeCycle.java:133) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle$1.run (TypeHierarchyLifeCycle.java:109) at org.eclipse.jface.operation.ModalContext.runInCurrentThread (ModalContext.java:299) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:249) at org.eclipse.jface.window.ApplicationWindow$1.run (ApplicationWindow.java:394) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:64) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:391) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1068) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.ensureRefreshed TypeHierarchy(TypeHierarchyLifeCycle.java:117) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.updateInput (TypeHierarchyViewPart.java:406) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.setInputElement (TypeHierarchyViewPart.java:392) at org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil.openInViewPart (OpenTypeHierarchyUtil.java:120) at org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil.open (OpenTypeHierarchyUtil.java:97) at org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run (OpenTypeHierarchyAction.java:120) at org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run (OpenTypeHierarchyAction.java:112) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun (SelectionDispatchAction.java:178) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run (SelectionDispatchAction.java:156) at org.eclipse.jface.action.Action.runWithEvent(Action.java:749) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection (ActionContributionItem.java:407) at org.eclipse.jface.action.ActionContributionItem.handleWidgetEvent (ActionContributionItem.java:361) at org.eclipse.jface.action.ActionContributionItem.access$0 (ActionContributionItem.java:352) at org.eclipse.jface.action.ActionContributionItem$ActionListener.handleEvent (ActionContributionItem.java:47) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:75) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:825) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:1527) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1289) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1177) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1160) at org.eclipse.core.internal.boot.InternalBootLoader.run (InternalBootLoader.java:739) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462) at java.lang.reflect.Method.invoke(Native Method) at org.eclipse.core.launcher.Main.basicRun(Main.java:248) at org.eclipse.core.launcher.Main.run(Main.java:697) at org.eclipse.core.launcher.Main.main(Main.java:530)
Added null checks, but scenario should not occur. Would a case where a type knows about a superclass which doesn't know it in return.
Might be region pruning causing this to happen. Need to investigate
Offending type is "CoolItem". When it is being removed, the subtypes collection is completely empty, even though the hierarchy was build with subtypes flag on.
CoolItem's superclass is Item, defined outside the region (swt/win32) since it belongs to (swt/common). But actually, the implementation of RegionBasedTypeHierarchy#removeType looks suspicious, since it is parent from children collection, before iterating into children... (see second line in method "this.typeToSubtypes.remove(type)". Given that, the null check is likely the best fix. Might revisit this code past 2.0, but it is fairly conservative (delete as much as possible locally before iterating into children). protected void removeType(IType type) { IType[] subtypes = this.getSubtypes(type); this.typeToSubtypes.remove(type); if (subtypes != null) { for (int i= 0; i < subtypes.length; i++) { this.removeType(subtypes[i]); } } IType superclass = (IType)this.classToSuperclass.remove(type); if (superclass != null) { TypeVector types = (TypeVector)this.typeToSubtypes.get (superclass); if (types != null) types.remove(type); } IType[] superinterfaces = (IType[])this.typeToSuperInterfaces.remove (type); if (superinterfaces != null) { for (int i = 0, length = superinterfaces.length; i < length; i++) { IType superinterface = superinterfaces[i]; TypeVector types = (TypeVector)this.typeToSubtypes.get (superinterface); if (types != null) types.remove(type); } } }
Verified.