Bug 107330 - ASTParser#createASTs(..) returns invalid binding for key of local type
Summary: ASTParser#createASTs(..) returns invalid binding for key of local type
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.2 M2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-08-18 10:51 EDT by Markus Keller CLA
Modified: 2005-09-20 13:33 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Keller CLA 2005-08-18 10:51:34 EDT
I20050816-1235

package xy;
import java.util.ArrayList;
public class LocalTest {
    void m() {
        class Local {
        	Local fSelf;
        }
        new ArrayList().add(new Local().fSelf);
    }
}

The key for type Local is "Lxy/LocalTest$98;". I pass this key to
ASTParser#createASTs(.., new String[] { key }, ..) to resolve a binding. When I
ask the resulting ITypeBinding for its #getJavaElement(), I get the exception below.

This can easily be reproduced in the ASTView by choosing "Resolve Binding
Key..." from the view menu.

java.lang.NullPointerException
at
org.eclipse.jdt.core.dom.TypeBinding.getUnresolvedJavaElement(TypeBinding.java:413)
at
org.eclipse.jdt.core.dom.TypeBinding.getUnresolvedJavaElement(TypeBinding.java:377)
at org.eclipse.jdt.core.dom.TypeBinding.getJavaElement(TypeBinding.java:370)
at org.eclipse.jdt.astview.views.Binding.getChildren(Binding.java:191)
at
org.eclipse.jdt.astview.views.ASTViewContentProvider.getChildren(ASTViewContentProvider.java:92)
at
org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:899)
at
org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:790)
at
org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(StructuredViewer.java:905)
at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:512)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at
org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:494)
at
org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:948)
at
org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractTreeViewer.java:959)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:180)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:883)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:907)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:892)
at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:4352)
at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3599)
at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1093)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3110)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3772)
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1604)
at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:223)
at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:3332)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3091)
at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:2908)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3772)
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(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
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)
Comment 1 Jerome Lanneluc CLA 2005-08-24 11:03:40 EDT
Changed TypeBinding#getUnresolvedJavaElement(..) to use the local binding's
sourceStart instead of the node's start position.

Added regression test ASTModelBridgeTests#testLocalType2()
Comment 2 Olivier Thomann CLA 2005-09-20 13:33:47 EDT
Verified with I20050920-0010 for 3.2M2.
I could successfully use the Resolve Binding Key... action.