Summary: | Open Type Hierarchy can start infinite progress monitor | ||
---|---|---|---|
Product: | [Eclipse Project] JDT | Reporter: | Grant Gayed <grant_gayed> |
Component: | Core | Assignee: | Jerome Lanneluc <jerome_lanneluc> |
Status: | VERIFIED FIXED | QA Contact: | |
Severity: | critical | ||
Priority: | P3 | ||
Version: | 2.0 | ||
Target Milestone: | 2.0 F3 | ||
Hardware: | PC | ||
OS: | Windows 2000 | ||
Whiteboard: |
Description
Grant Gayed
2002-06-07 14:22:45 EDT
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. |