Bug 48459 - NPE in Type hierarchy
Summary: NPE in Type hierarchy
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Linux
: P3 major (vote)
Target Milestone: 3.0 M7   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-12-10 23:59 EST by Paul Smith CLA
Modified: 2004-02-12 12:55 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Smith CLA 2003-12-10 23:59:30 EST
3.0M5

Found an NPE on some classes within our project when using the type hierarchy.  
THIS IS A DIFFERENT NPE than the other bugs registered in bugzilla.  I did 
review all the othe bugs and none seemed to match.

Notice the:
 Caused by: java.lang.NullPointerException        at
    org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.
getField(BinaryTypeBinding.java:346)        at

<snip>

!ENTRY org.eclipse.jdt.ui 4 10001 Dec 11, 2003 15:29:36.06
!MESSAGE Internal Error!STACK 0
java.lang.reflect.InvocationTargetException        at
org.eclipse.jface.operation.ModalContext.run(ModalContext.java:283)        at
org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:444)     
   at
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:84)        at
org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:441)       
 at
org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1467)        at
org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.
ensureRefreshedTypeHierarchy(TypeHierarchyLifeCycle.java:122)        at
org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.
updateInput(TypeHierarchyViewPart.java:465)        at
org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart.
setInputElement(TypeHierarchyViewPart.java:446)        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:175)        at
org.eclipse.jdt.ui.actions.OpenTypeHierarchyAction.run(OpenTypeHierarchyAction.
java:141)        at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.
dispatchRun(SelectionDispatchAction.java:196)        at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.
java:172)        at
org.eclipse.jface.action.Action.runWithEvent(Action.java:842)        at
org.eclipse.ui.actions.RetargetAction.runWithEvent(RetargetAction.java:212)      
  at
org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:212) 
       at
org.eclipse.jface.action.ActionContributionItem.
handleWidgetSelection(ActionContributionItem.java:542)        at
org.eclipse.jface.action.ActionContributionItem.access$4(ActionContributionItem.
java:494)        at
org.eclipse.jface.action.ActionContributionItem$6.
handleEvent(ActionContributionItem.java:466)        at
org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)        at
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:967)        at
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:1839)        at
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1619)        at
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1405)        at
org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1381)        at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:237)      
  at
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)        at
org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:47)        at
org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoader.java:
858)        at
org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)        at
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
     at
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.
java:25)        at
  java.lang.reflect.Method.invoke(Method.java:324)        at
   org.eclipse.core.launcher.Main.basicRun(Main.java:299)        at
    org.eclipse.core.launcher.Main.run(Main.java:767)        at
    org.eclipse.core.launcher.Main.main(Main.java:601)


 Caused by: java.lang.NullPointerException        at
    org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.
getField(BinaryTypeBinding.java:346)        at
    org.eclipse.jdt.internal.compiler.lookup.Scope.findField(Scope.java:205)     
   at
    org.eclipse.jdt.internal.compiler.lookup.MethodScope.findField(MethodScope.
java:332)        at
    org.eclipse.jdt.internal.compiler.lookup.BlockScope.getBinding(BlockScope.
java:428)        at
    org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.
resolveType(QualifiedNameReference.java:746)        at
    org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.
java:196)        at
    org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:
445)        at
    org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.
resolveStatements(AbstractMethodDeclaration.java:378)        at
    org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.
resolveStatements(MethodDeclaration.java:137)        at
    org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.
resolve(AbstractMethodDeclaration.java:355)        at
    org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.
resolve(TypeDeclaration.java:839)        at
    org.eclipse.jdt.internal.compiler.ast.AnonymousLocalTypeDeclaration.
resolve(AnonymousLocalTypeDeclaration.java:124)        at
    org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.
resolveType(QualifiedAllocationExpression.java:294)        at
    org.eclipse.jdt.internal.compiler.ast.FieldDeclaration.
resolve(FieldDeclaration.java:193)        at
    org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.
resolve(TypeDeclaration.java:823)        at
    org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.
resolve(TypeDeclaration.java:889)        at
    org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.
resolve(CompilationUnitDeclaration.java:271)        at
    org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.
resolve(HierarchyResolver.java:668)        at
    org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.
buildForProject(IndexBasedHierarchyBuilder.java:199)        at
    org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.
buildFromPotentialSubtypes(IndexBasedHierarchyBuilder.java:311)        at
    org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.
build(IndexBasedHierarchyBuilder.java:134)        at
    org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.
java:319)        at
    org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.
java:1230)        at
    org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.
executeOperation(CreateTypeHierarchyOperation.java:90)        at
    org.eclipse.jdt.internal.core.JavaModelOperation.execute(JavaModelOperation.
java:367)        at
    org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.
java:706)        at
    org.eclipse.jdt.internal.core.JavaElement.runOperation(JavaElement.java:523) 
       at
    org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy(SourceType.java:
594)        at
    org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.
doHierarchyRefresh(TypeHierarchyLifeCycle.java:141)        at
    org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.
access$0(TypeHierarchyLifeCycle.java:127)        ato
   rg.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle$1.
run(TypeHierarchyLifeCycle.java:115)        at
   org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.
java:101)
Comment 1 Philipe Mulet CLA 2003-12-11 00:42:39 EST
Would you have steps to reproduce ?
Comment 2 Paul Smith CLA 2003-12-11 00:45:18 EST
I'd probably have to send the whole project, and I won't be able to due to 
commercial code base.

it seems to be on classes that have a fairly long tree of children... Like only 
when it has to work fairly hard to add all the child info.
Comment 3 Kent Johnson CLA 2003-12-16 10:30:25 EST
The problem is that the hierarchy resolver is created the BinaryTypeBinding & 
is choosing to NOT create its field/method bindings.

Added protection so that these 2 fields are empty arrays instead of null.

Need to examine if the hierarchy resolved needs fields/methods in this case.
Comment 4 Jerome Lanneluc CLA 2004-01-08 07:30:09 EST
Fixed HierarchyResolver to always build field and method bindings for binary 
types. Workaround by Kent is also good to keep.

Added regression test TypeHierarchyTests.testBinarySubclass().
Comment 5 David Audel CLA 2004-02-12 12:55:26 EST
Verified for 3.0M7