Community
Participate
Working Groups
Build 3.0M8+jdtcore1.5 Cannot save the file X.java : import java.util.ArrayList; public class X extends ArrayList<String> { public static void main(String[] args) { } } due to exception: java.lang.Error: Undefined base type: t at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromSignature (LookupEnvironment.java:599) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignat ure(LookupEnvironment.java:641) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom (BinaryTypeBinding.java:200) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom (LookupEnvironment.java:314) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom (LookupEnvironment.java:297) at org.eclipse.jdt.internal.compiler.Compiler.accept(Compiler.java:191) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType (LookupEnvironment.java:81) at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve (UnresolvedReferenceBinding.java:43) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType (BinaryTypeBinding.java:49) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.memberTypes (BinaryTypeBinding.java:568) at org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.memberTypes (ParameterizedTypeBinding.java:343) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.checkForInheritedMemberTypes (ClassScope.java:578) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:777) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarc hy(CompilationUnitScope.java:236) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:177) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:569) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process (CompilationUnitProblemFinder.java:175) at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure (CompilationUnit.java:145) at org.eclipse.jdt.internal.core.Openable.generateInfos (Openable.java:183) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed (JavaElement.java:543) at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent (CompilationUnit.java:973) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation (ReconcileWorkingCopyOperation.java:56) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:700) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation (JavaModelOperation.java:739) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile (CompilationUnit.java:1080) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile (CompilationUnit.java:1057) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWor kingCopy(CompilationUnitDocumentProvider.java:870) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$2.execute (CompilationUnitDocumentProvider.java:935) at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.r un(TextFileDocumentProvider.java:94) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute (WorkspaceModifyDelegatingOperation.java:67) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run (WorkspaceModifyOperation.java:91) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1559) at org.eclipse.ui.actions.WorkspaceModifyOperation.run (WorkspaceModifyOperation.java:105) at org.eclipse.ui.editors.text.WorkspaceOperationRunner.run (WorkspaceOperationRunner.java:73) at org.eclipse.ui.editors.text.WorkspaceOperationRunner.run (WorkspaceOperationRunner.java:63) at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation (TextFileDocumentProvider.java:392) at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument (TextFileDocumentProvider.java:612) at org.eclipse.ui.texteditor.AbstractTextEditor.performSave (AbstractTextEditor.java:3136) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave (CompilationUnitEditor.java:1188) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave (CompilationUnitEditor.java:1238) at org.eclipse.ui.internal.EditorManager$10.run(EditorManager.java:982) at org.eclipse.ui.internal.EditorManager$8.run(EditorManager.java:837) at org.eclipse.jface.operation.ModalContext.runInCurrentThread (ModalContext.java:302) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:252) at org.eclipse.jface.window.ApplicationWindow$1.run (ApplicationWindow.java:576) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:84) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:573) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1606) at org.eclipse.ui.internal.EditorManager.runProgressMonitorOperation (EditorManager.java:843) at org.eclipse.ui.internal.EditorManager.savePart (EditorManager.java:987) at org.eclipse.ui.internal.WorkbenchPage.savePart (WorkbenchPage.java:2450) at org.eclipse.ui.internal.WorkbenchPage.saveEditor (WorkbenchPage.java:2462) at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:69) at org.eclipse.jface.action.Action.runWithEvent(Action.java:881) at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:68) at org.eclipse.ui.internal.commands.Command.execute(Command.java:173) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand (WorkbenchKeyboard.java:463) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press (WorkbenchKeyboard.java:855) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent (WorkbenchKeyboard.java:896) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings (WorkbenchKeyboard.java:522) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2 (WorkbenchKeyboard.java:488) at org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent (WorkbenchKeyboard.java:261) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:705) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:768) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:793) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:778) at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1720) at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1716) at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3041) at org.eclipse.swt.widgets.Control.windowProc(Control.java:2944) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3146) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1374) at org.eclipse.swt.internal.BidiUtil.windowProc(BidiUtil.java:647) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1450) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2254) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1562) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1536) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench (Workbench.java:257) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139) at org.eclipse.ui.internal.ide.IDEApplication.run (IDEApplication.java:90) at org.eclipse.core.internal.runtime.PlatformActivator$1.run (PlatformActivator.java:277) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:239) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:117) 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:495) at org.eclipse.core.launcher.Main.basicRun(Main.java:267) at org.eclipse.core.launcher.Main.run(Main.java:692) at org.eclipse.core.launcher.Main.main(Main.java:676) java.lang.Error: Undefined base type: t at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromSignature (LookupEnvironment.java:599) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignat ure(LookupEnvironment.java:641) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom (BinaryTypeBinding.java:200) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom (LookupEnvironment.java:314) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom (LookupEnvironment.java:297) at org.eclipse.jdt.internal.compiler.Compiler.accept(Compiler.java:191) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType (LookupEnvironment.java:81) at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve (UnresolvedReferenceBinding.java:43) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType (BinaryTypeBinding.java:49) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.memberTypes (BinaryTypeBinding.java:568) at org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.memberTypes (ParameterizedTypeBinding.java:343) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.checkForInheritedMemberTypes (ClassScope.java:578) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy (ClassScope.java:777) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarc hy(CompilationUnitScope.java:236) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings (LookupEnvironment.java:177) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:569) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process (CompilationUnitProblemFinder.java:175) at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure (CompilationUnit.java:145) at org.eclipse.jdt.internal.core.Openable.generateInfos (Openable.java:183) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed (JavaElement.java:543) at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent (CompilationUnit.java:973) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation (ReconcileWorkingCopyOperation.java:56) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:700) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation (JavaModelOperation.java:739) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile (CompilationUnit.java:1080) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile (CompilationUnit.java:1057) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWor kingCopy(CompilationUnitDocumentProvider.java:870) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$2.execute (CompilationUnitDocumentProvider.java:935) at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.r un(TextFileDocumentProvider.java:94) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute (WorkspaceModifyDelegatingOperation.java:67) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run (WorkspaceModifyOperation.java:91) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1559) at org.eclipse.ui.actions.WorkspaceModifyOperation.run (WorkspaceModifyOperation.java:105) at org.eclipse.ui.editors.text.WorkspaceOperationRunner.run (WorkspaceOperationRunner.java:73) at org.eclipse.ui.editors.text.WorkspaceOperationRunner.run (WorkspaceOperationRunner.java:63) at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation (TextFileDocumentProvider.java:392) at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument (TextFileDocumentProvider.java:612) at org.eclipse.ui.texteditor.AbstractTextEditor.performSave (AbstractTextEditor.java:3136) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave (CompilationUnitEditor.java:1188) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave (CompilationUnitEditor.java:1238) at org.eclipse.ui.internal.EditorManager$10.run(EditorManager.java:982) at org.eclipse.ui.internal.EditorManager$8.run(EditorManager.java:837) at org.eclipse.jface.operation.ModalContext.runInCurrentThread (ModalContext.java:302) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:252) at org.eclipse.jface.window.ApplicationWindow$1.run (ApplicationWindow.java:576) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:84) at org.eclipse.jface.window.ApplicationWindow.run (ApplicationWindow.java:573) at org.eclipse.ui.internal.WorkbenchWindow.run (WorkbenchWindow.java:1606) at org.eclipse.ui.internal.EditorManager.runProgressMonitorOperation (EditorManager.java:843) at org.eclipse.ui.internal.EditorManager.savePart (EditorManager.java:987) at org.eclipse.ui.internal.WorkbenchPage.savePart (WorkbenchPage.java:2450) at org.eclipse.ui.internal.WorkbenchPage.saveEditor (WorkbenchPage.java:2462) at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:69) at org.eclipse.jface.action.Action.runWithEvent(Action.java:881) at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:68) at org.eclipse.ui.internal.commands.Command.execute(Command.java:173) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand (WorkbenchKeyboard.java:463) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press (WorkbenchKeyboard.java:855) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent (WorkbenchKeyboard.java:896) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings (WorkbenchKeyboard.java:522) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2 (WorkbenchKeyboard.java:488) at org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent (WorkbenchKeyboard.java:261) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:705) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:768) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:793) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:778) at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1720) at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1716) at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3041) at org.eclipse.swt.widgets.Control.windowProc(Control.java:2944) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3146) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1374) at org.eclipse.swt.internal.BidiUtil.windowProc(BidiUtil.java:647) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1450) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2254) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1562) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1536) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench (Workbench.java:257) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139) at org.eclipse.ui.internal.ide.IDEApplication.run (IDEApplication.java:90) at org.eclipse.core.internal.runtime.PlatformActivator$1.run (PlatformActivator.java:277) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:239) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:117) 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:495) at org.eclipse.core.launcher.Main.basicRun(Main.java:267) at org.eclipse.core.launcher.Main.run(Main.java:692) at org.eclipse.core.launcher.Main.main(Main.java:676)
The problem comes from the fact we don't decode parameterized qualified name signatures: In order to properly decode it, the signature wrapper should likely combine the original descriptor so as to get the information about member types ($ names vs. . names). e.g. // Method descriptor #19 (LX$MX$MMX;)V // Signature: (LX<Ljava/lang/Thread;>.MX.MMX<LX;>;)V from input: public class X <T>{ public static void main(String [] args) { new X<String>().new MX<Exception>(); } void foo(X<Thread>.MX.MMX<X> mx) { } class MX <MT> { class MMX <MMT> { } } }
Other example: public class X <T extends X.MX<Runnable>.MMX<Iterable<String>>>{ public static void main(String [] args) { new X<X.MX<Runnable>.MMX<Iterable<String>>>().new MX<Exception>(); } void foo(X<Thread>.MX.MMX<X> mx) { } class MX <MT> { class MMX <MMT> { } } } Observe the leading portion of T bound signature, it is using a dollar name... bug or expected behavior. Spec doesn't describe this. // Compiled from X.java (version 1.5 : 49.0, super bit) // Signature: <T:LX$MX<Ljava/lang/Runnable;>.MMX<Ljava/lang/Iterable<Ljava/lang/String;>;>;>Lj ava/lang/Object; class X extends java.lang.Object { // Method descriptor #19 (LX$MX$MMX;)V // Signature: (LX<Ljava/lang/Thread;>.MX.MMX<LX;>;)V // Stack: 0, Locals: 2 void foo(X$MX$MMX arg);
Actually, we should rely on the leading '$' which means we do not need to reach the original descriptor to properly decode the information in the signature.
fixed.
*** Bug 58070 has been marked as a duplicate of this bug. ***