Bug 110563

Summary: [1.5][compiler] Internal compiler error for varags
Product: [Eclipse Project] JDT Reporter: Pekka Enberg <penberg>
Component: CoreAssignee: Philipe Mulet <philippe_mulet>
Status: VERIFIED FIXED QA Contact:
Severity: major    
Priority: P3    
Version: 3.2   
Target Milestone: 3.1.1   
Hardware: PC   
OS: Linux   
Whiteboard:

Description Pekka Enberg CLA 2005-09-26 03:22:51 EDT
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)
Comment 1 Philipe Mulet CLA 2005-09-26 10:11:54 EDT
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.
Comment 2 Philipe Mulet CLA 2005-09-26 10:12:43 EDT
Fixed in build > 3.1rc2
Comment 3 Philipe Mulet CLA 2005-09-26 10:13:10 EDT
(should read: build > 3.1.1rc2)
Comment 4 Olivier Thomann CLA 2005-09-27 15:37:06 EDT
Verified in  M20050923-1430 + JDT/Core 3.1.1RC3 candidate