Community
Participate
Working Groups
Given the classes: public class A<T> {} public class B<T> extends A<C> {} public class C extends B<C> {} public class D extends B<D> {} requesting a type hierarchy (F4) for D produces an NPE (stack trace below). This is similar to bug 108378, which was fixed with 3.2M1, but this situation fails under 3.2M1. Stack trace: java.lang.reflect.InvocationTargetException at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:327) at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:631) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69) at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:628) at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2138) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.ensureRefreshe dTypeHierarchy(TypeHierarchyLifeCycle.java:107) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.updateInput (TypeHierarchyViewPart.java:520) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.setInputElement (TypeHierarchyViewPart.java:484) at org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil.openInViewPart (OpenTypeHierarchyUtil.java:98) at org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil.open (OpenTypeHierarchyUtil.java:75) at org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run (OpenTypeHierarchyAction.java:196) at org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run (OpenTypeHierarchyAction.java:151) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun (SelectionDispatchAction.java:226) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run (SelectionDispatchAction.java:198) at org.eclipse.jface.action.Action.runWithEvent(Action.java:996) at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:182) at org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute (LegacyHandlerWrapper.java:108) at org.eclipse.core.commands.Command.execute(Command.java:311) at org.eclipse.core.commands.ParameterizedCommand.execute (ParameterizedCommand.java:396) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand (WorkbenchKeyboard.java:459) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press (WorkbenchKeyboard.java:781) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent (WorkbenchKeyboard.java:828) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings (WorkbenchKeyboard.java:550) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3 (WorkbenchKeyboard.java:493) at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent (WorkbenchKeyboard.java:117) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:920) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:867) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:892) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:877) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:905) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:901) at org.eclipse.swt.widgets.Widget.wmKeyDown(Widget.java:1500) at org.eclipse.swt.widgets.Control.WM_KEYDOWN(Control.java:3376) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3087) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3773) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1680) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2763) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1734) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1698) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103) at org.eclipse.core.internal.runtime.PlatformActivator$1.run (PlatformActivator.java:226) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 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.core.launcher.Main.invokeFramework(Main.java:338) at org.eclipse.core.launcher.Main.basicRun(Main.java:282) at org.eclipse.core.launcher.Main.run(Main.java:977) at org.eclipse.core.launcher.Main.main(Main.java:952) Caused by: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.lookup.ClassScope.checkForInheritedMemberType s(ClassScope.java:662) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:946) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierar chy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:251) at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept (HierarchyResolver.java:153) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType (LookupEnvironment.java:131) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage (PackageBinding.java:178) at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage (Scope.java:2427) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2166) at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding (SingleTypeReference.java:39) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType (TypeReference.java:141) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveTypeArgument (TypeReference.java:158) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.internal ResolveType(ParameterizedSingleTypeReference.java:136) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.resolveT ype(ParameterizedSingleTypeReference.java:223) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType (TypeReference.java:104) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype (ClassScope.java:1097) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass (ClassScope.java:757) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:937) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierar chy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:251) at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept (HierarchyResolver.java:153) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType (LookupEnvironment.java:131) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage (PackageBinding.java:178) at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage (Scope.java:2427) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2166) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.internal ResolveType(ParameterizedSingleTypeReference.java:98) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.resolveT ype(ParameterizedSingleTypeReference.java:223) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType (TypeReference.java:104) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype (ClassScope.java:1097) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass (ClassScope.java:757) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:937) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierar chy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:251) at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve (HierarchyResolver.java:653) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.buildForProj ect(IndexBasedHierarchyBuilder.java:197) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.buildFromPot entialSubtypes(IndexBasedHierarchyBuilder.java:304) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build (IndexBasedHierarchyBuilder.java:130) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute (TypeHierarchy.java:320) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh (TypeHierarchy.java:1255) at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation (CreateTypeHierarchyOperation.java:90) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:718) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation (JavaModelOperation.java:777) at org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy (SourceType.java:716) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.createTypeHier archy(TypeHierarchyLifeCycle.java:118) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.doHierarchyRef resh(TypeHierarchyLifeCycle.java:157) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle$1.run (TypeHierarchyLifeCycle.java:98) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run (ModalContext.java:113) Root exception: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.lookup.ClassScope.checkForInheritedMemberType s(ClassScope.java:662) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:946) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierar chy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:251) at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept (HierarchyResolver.java:153) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType (LookupEnvironment.java:131) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage (PackageBinding.java:178) at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage (Scope.java:2427) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2166) at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding (SingleTypeReference.java:39) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType (TypeReference.java:141) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveTypeArgument (TypeReference.java:158) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.internal ResolveType(ParameterizedSingleTypeReference.java:136) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.resolveT ype(ParameterizedSingleTypeReference.java:223) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType (TypeReference.java:104) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype (ClassScope.java:1097) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass (ClassScope.java:757) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:937) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierar chy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:251) at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept (HierarchyResolver.java:153) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType (LookupEnvironment.java:131) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage (PackageBinding.java:178) at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage (Scope.java:2427) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2166) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.internal ResolveType(ParameterizedSingleTypeReference.java:98) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.resolveT ype(ParameterizedSingleTypeReference.java:223) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType (TypeReference.java:104) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype (ClassScope.java:1097) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass (ClassScope.java:757) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:937) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierar chy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:251) at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve (HierarchyResolver.java:653) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.buildForProj ect(IndexBasedHierarchyBuilder.java:197) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.buildFromPot entialSubtypes(IndexBasedHierarchyBuilder.java:304) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build (IndexBasedHierarchyBuilder.java:130) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute (TypeHierarchy.java:320) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh (TypeHierarchy.java:1255) at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation (CreateTypeHierarchyOperation.java:90) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:718) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation (JavaModelOperation.java:777) at org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy (SourceType.java:716) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.createTypeHier archy(TypeHierarchyLifeCycle.java:118) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.doHierarchyRef resh(TypeHierarchyLifeCycle.java:157) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle$1.run (TypeHierarchyLifeCycle.java:98) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run (ModalContext.java:113) Session data: eclipse.buildId=I20050811-1530 java.version=1.5.0_04 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
It appears that the problem is due to the pre-initialization of SourceTypeBinding.superInterfaces not occurring early enough. It appears that a 3.2M1 modification was to pre-initialize this field to NoSuperInterfaces at the beginning of connectSuperInterfaces() in order to guard against it being referenced in a recursive call before its ultimate value was determined. In this example, however, it is referenced from a recursive call to connectSuperclass(). A fix therefore seems to be to do this pre-initialization in connectSuperclass(). This modification at least solves the problem for this particular example.
Added TypeHierarchyTests testGeneric8 Released in 3.1.1 stream. But did not make it into 3.2M2 build in time - will show up in subsequent builds.
Verified for 3.1.1 using M20050923-1430.
Released into HEAD