Community
Participate
Working Groups
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.
Reproduced.
Problem occurs when trying to retrieve superclass of parameterized List<T> ref (during ref info recording). The superclass of generic type: List is null.
This is a legite scenario, as interfaces have no superclass. Fixed ParameterizedTypeBinding by not attempting substitution when no superclass is intended.
Fixed
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.