Bug 100549 - Strange binding keys from AST on class file of nested type
Summary: Strange binding keys from AST on class file of nested type
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1   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-06-17 06:00 EDT by Markus Keller CLA
Modified: 2005-09-20 11:44 EDT (History)
0 users

See Also:


Attachments
Fix (1.53 KB, patch)
2005-06-28 06:11 EDT, Jerome Lanneluc CLA
no flags Details | Diff
Regression test (2.16 KB, patch)
2005-06-28 06:11 EDT, Jerome Lanneluc CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Keller CLA 2005-06-17 06:00:36 EDT
I20050617-0010

Open an editor on Class$MethodArray.class from an 1.5 JRE and look at the type
bindings in the ASTView. All type binding keys of elements from the same source
file are prefixed with "Ljava/lang/Class$MethodArray~", e.g. the declaration
    class Class<T> implements ..
has KEY: 'Ljava/lang/Class$MethodArray~Class<TT;>;'

I would expect that the binding keys are the same as when requested from an AST
on Class.class.

I guess this is the reason for other strange effects e.g. the exception below,
which happens in the java element label calculation when I expand the node
    > method binding: MethodArray.add(Method)
in the AST on Class$MethodArray.class.

I don't think this is critical for 3.2, since I guess we rarely (never?) create
ASTs on class files for other reasons than semantic highlighting.

Error 2005-06-17 11:54:20.801 Problems occurred when invoking code from plug-in:
"org.eclipse.jface".
java.lang.IllegalArgumentException
	at org.eclipse.jdt.core.Signature.getParameterCount(Signature.java:981)
	at org.eclipse.jdt.core.Signature.getParameterTypes(Signature.java:1155)
	at org.eclipse.jdt.core.Signature.getParameterTypes(Signature.java:1194)
	at org.eclipse.jdt.ui.JavaElementLabels.getMethodLabel(JavaElementLabels.java:490)
	at org.eclipse.jdt.ui.JavaElementLabels.getElementLabel(JavaElementLabels.java:386)
	at org.eclipse.jdt.ui.JavaElementLabels.getElementLabel(JavaElementLabels.java:363)
	at org.eclipse.jdt.astview.views.JavaElement.getLabel(JavaElement.java:55)
	at
org.eclipse.jdt.astview.views.ASTViewLabelProvider.getText(ASTViewLabelProvider.java:66)
	at
org.eclipse.jface.viewers.StructuredViewer.buildLabel(StructuredViewer.java:1877)
	at org.eclipse.jface.viewers.TreeViewer.doUpdateItem(TreeViewer.java:231)
	at
org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:85)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:148)
	at
org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:621)
	at
org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:434)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:148)
	at
org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:1763)
	at
org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:535)
	at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:514)
	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:179)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:844)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:868)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:853)
	at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:3704)
	at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3567)
	at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1035)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3088)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3694)
	at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1580)
	at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:219)
	at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:2815)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3070)
	at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:2391)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3694)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1656)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2701)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
	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:334)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
	at org.eclipse.core.launcher.Main.run(Main.java:973)
	at org.eclipse.core.launcher.Main.main(Main.java:948)
Comment 1 David Audel CLA 2005-06-17 09:14:56 EDT
SourceTypeBinding#computeUniqueKey() doesn't compute correctly 'mainTypeName'.
It should be 'Class' instead of 'Class$MemberArray'.

This problem can only occurs with a member type of a binary type.
Comment 2 Jerome Lanneluc CLA 2005-06-28 06:11:04 EDT
Created attachment 24068 [details]
Fix

Changed SourceTypeBinding#computeUniqueKey(...) to not insert the openable's
name in the case of a .class file.
Comment 3 Jerome Lanneluc CLA 2005-06-28 06:11:23 EDT
Created attachment 24069 [details]
Regression test
Comment 4 Jerome Lanneluc CLA 2005-08-17 08:38:17 EDT
Released fix and regression test.
Comment 5 Olivier Thomann CLA 2005-09-20 11:44:41 EDT
Verified in I20050920-0010 for 3.2M2