Bug 150758 - [1.5][compiler] NullPointerException in internal compiler
Summary: [1.5][compiler] NullPointerException in internal compiler
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 3.2.1   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-07-16 14:49 EDT by Jeremy Redburn CLA
Modified: 2008-11-13 05:06 EST (History)
1 user (show)

See Also:


Attachments
Proposed patch (1.79 KB, patch)
2006-07-17 05:43 EDT, Philipe Mulet CLA
no flags Details | Diff
Patch for applying this fix to 3.2.0 (3.37 KB, patch)
2008-11-13 05:06 EST, Philipe Mulet CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jeremy Redburn CLA 2006-07-16 14:49:09 EDT
I am running into an internal compiler error in 3.2 that worked fine in 3.1. It seems to occur when I want to use a method implementation in an abstract superclass but have a method of the same name (but different signature) with default visibility in the concrete class.

Here's a simple test case:

package package1;

import package2.MyList;

public class Test {
	public void reproduce(String sortKey, boolean isAscending) {
		MyList recList = new MyList();
		recList.add(null);
	}
}

...

package package2;

import java.util.AbstractList;
import java.util.List;

public class MyList extends AbstractList implements List {

	void add(Integer i) {
	}
	
	public Object get(int index) {
		// TODO Auto-generated method stub
		return null;
	}

	public int size() {
		// TODO Auto-generated method stub
		return 0;
	}
	
}


The full stack trace:

Internal compiler error java.lang.NullPointerException at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1228) at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2013) at 
 org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:384) at 
 org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:880) at 
 org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements
 (AbstractMethodDeclaration.java:432) at 
 org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements
 (MethodDeclaration.java:179) at 
 org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve
 (AbstractMethodDeclaration.java:403) at 
 org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1047) at 
 org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1094) at 
 org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve
 (CompilationUnitDeclaration.java:353) at org.eclipse.jdt.internal.compiler.Compiler.process
 (Compiler.java:594) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:411) at 
 org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:300) 
 at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:217) at 
 org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:237) 
 at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:56) at 
 org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:249) at 
 org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:174) at 
 org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:603) at 
 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at 
 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:167) at 
 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201) at 
 org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:230) at 
 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at 
 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:233) at 
 org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:252) at 
 org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:285) at 
 org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:145) at 
 org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:208) at 
 org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)
Comment 1 Philipe Mulet CLA 2006-07-17 05:29:54 EDT
Reproduced in latest. Investigating.
Added LookupTest#test075
Comment 2 Philipe Mulet CLA 2006-07-17 05:42:32 EDT
Issue got introduced along with fixes for bug 133737 and bug 129388.
Problem comes using #candidateCount instead of #visibleCount for a parameterized method collision check (hence >=1.5 compliance specific).

Kent - pls revise the associated patch
Comment 3 Philipe Mulet CLA 2006-07-17 05:43:27 EDT
Created attachment 46365 [details]
Proposed patch
Comment 4 Philipe Mulet CLA 2006-07-17 06:27:39 EDT
Released for 3.3M1 (HEAD)
Released for 3.2.1 (R3_2_maintenance)

Fixed
Comment 5 Frederic Fusier CLA 2006-08-08 09:44:35 EDT
Verified for 3.3 M1 using build I20060807-2000.
Comment 6 David Audel CLA 2006-09-11 11:37:22 EDT
Verified for 3.2.1 using build M20060908-1655
Comment 7 Philipe Mulet CLA 2008-11-13 05:06:15 EST
Created attachment 117751 [details]
Patch for applying this fix to 3.2.0