Bug 58979 - [1.5] NullPointerException in compiler
Summary: [1.5] NullPointerException in compiler
Status: RESOLVED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M1   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-04-17 06:47 EDT by Stefan Matthias Aust CLA
Modified: 2005-01-11 11:02 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Matthias Aust CLA 2004-04-17 06:47:01 EDT
This code fragment

 interface Predicate<T> {
  boolean is(T t);
 }
 interface List<T> {
  List<T> select(Predicate<T> p);
 }
 class ArrayList<T> implements List<T>, Iterable<T> {
  public List<T> select(Predicate<T> p) {
   ArrayList<T> result = new ArrayList<T>();
   for (T t : this) {
    if (p.is(t)) result.add(t);
   }
   return result;
  }
 }

causes this error 

 Internal compiler error
java.lang.NullPointerException
	at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.substitute(ParameterizedTypeBinding.java:542)
	at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.superclass(ParameterizedTypeBinding.java:595)
	at
org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.storeDependencyInfo(CompilationUnitScope.java:565)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:535)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:333)
	at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:209)
	at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:159)
	at
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:49)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:212)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:140)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:512)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:611)
	at org.eclipse.core.runtime.Platform.run(Platform.java:543)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:140)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:227)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:169)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:197)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:611)
	at org.eclipse.core.runtime.Platform.run(Platform.java:543)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:200)
	at
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:245)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:273)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:140)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:176)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:62)

in Cheetah3 with integration build I200404131110.
Comment 1 Philipe Mulet CLA 2004-04-19 07:05:57 EDT
Reproduced.
Comment 2 Philipe Mulet CLA 2004-04-19 07:12:29 EDT
Problem occurs when trying to retrieve superclass of parameterized List<T> ref 
(during ref info recording). The superclass of generic type: List is null.
Comment 3 Philipe Mulet CLA 2004-04-19 07:52:52 EDT
This is a legite scenario, as interfaces have no superclass. 
Fixed ParameterizedTypeBinding by not attempting substitution when no 
superclass is intended.
Comment 4 Philipe Mulet CLA 2004-04-19 07:53:07 EDT
Fixed
Comment 5 Philipe Mulet CLA 2004-04-19 08:07:30 EDT
Simplified test case:
 interface List<T> {
	 List<T> foo();
}

 class ArrayList<T> implements List<T> {
	public List<T> foo() {
		List<T> lt = this;
		lt.bar();
		return this;
	}
}

Added GenericTypeTest#test131.