Bug 108740 - [1.5][compiler] Type hierarchy with generics fails with NPE
Summary: [1.5][compiler] Type hierarchy with generics fails with NPE
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 3.1.1   Edit
Assignee: Kent Johnson CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-09-02 23:57 EDT by Eric Inman CLA
Modified: 2005-09-26 15:34 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eric Inman CLA 2005-09-02 23:57:02 EDT
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
Comment 1 Eric Inman CLA 2005-09-03 00:26:59 EDT
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.
Comment 2 Kent Johnson CLA 2005-09-22 16:29:33 EDT
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.
Comment 3 Olivier Thomann CLA 2005-09-26 11:26:29 EDT
Verified for 3.1.1 using M20050923-1430.
Comment 4 Kent Johnson CLA 2005-09-26 15:34:25 EDT
Released into HEAD