Community
Participate
Working Groups
The following code causes an internal compiler error for Eclipse 3.2 M1 and 3.2 M2. It works fine in Eclipse 3.1 RC1. import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import junit.framework.TestCase; /** * @author Pekka Enberg */ public class BreakEclipseTest extends TestCase { public void testBreak() { Collection<Class> classes = new ArrayList<Class>(); assertEquals(3, classes.size()); assertTrue(classes.containsAll(Arrays.asList(String.class, Integer.class, Long.class))); } } The error is: Error 2005-09-26 10:21:18.198 Error in JDT Core during AST creation java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.lookup.Scope.lowerUpperBound(Scope.java:2965) at org.eclipse.jdt.internal.compiler.lookup.Scope.leastContainingTypeArgument(Scope.java:2927) at org.eclipse.jdt.internal.compiler.lookup.Scope.leastContainingInvocation(Scope.java:2845) at org.eclipse.jdt.internal.compiler.lookup.Scope.lowerUpperBound(Scope.java:2985) at org.eclipse.jdt.internal.compiler.lookup.Scope.lowerUpperBound(Scope.java:2945) at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.resolveSubstituteConstraints(ParameterizedGenericMethodBinding.java:245) at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.inferFromArgumentTypes(ParameterizedGenericMethodBinding.java:167) at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.computeCompatibleMethod(ParameterizedGenericMethodBinding.java:63) at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:358) at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1118) at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2102) at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:314) at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:291) at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:291) at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:829) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:418) at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:177) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:396) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1082) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1131) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:305) at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:821) at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:498) at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:789) at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:588) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:566) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044) at org.eclipse.core.runtime.Platform.run(Platform.java:783) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:563) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:493) at org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.getClipboardData(ClipboardOperationAction.java:393) at org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.doCutCopyWithImportsOperation(ClipboardOperationAction.java:322) at org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.internalDoOperation(ClipboardOperationAction.java:278) at org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction$1.run(ClipboardOperationAction.java:247) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69) at org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.run(ClipboardOperationAction.java:245) 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:397) 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:1244) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1049) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1074) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1059) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1086) at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:640) at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:1965) at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:564) at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1395) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3490) at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method) at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:4891) at org.eclipse.swt.widgets.Display.eventProc(Display.java:1059) at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method) at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1271) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2603) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1755) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1719) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:368) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:106) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:377) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:164) 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)
The problem came from the substitute collecting which allowed null values to show up (when growing array of substitutes), then the infinite regression check did not handle these nicely. Made grow not introduce nulls, and added protection to regression check (since may occur through different execution path). Added VarargsTest#test036. Fix in 3.1 maintenance branch, and HEAD.
Fixed in build > 3.1rc2
(should read: build > 3.1.1rc2)
Verified in M20050923-1430 + JDT/Core 3.1.1RC3 candidate