Community
Participate
Working Groups
From bug 249027 With this test case the builder, ast parser and reconciler thrown an NPE p1/C1.java: package p1; public class C1 {} p1/C1/C2.java: public class C2 { C1 f; // <- select here } NPE in builder: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.packageCollidesWithType(ProblemReporter.java:5435) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.buildTypeBindings(CompilationUnitScope.java:87) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.buildTypeBindings(LookupEnvironment.java:149) at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:701) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:363) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:300) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:173) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:633) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:140) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) NPE in reconciler: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.packageCollidesWithType(ProblemReporter.java:5435) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.buildTypeBindings(CompilationUnitScope.java:87) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.buildTypeBindings(LookupEnvironment.java:149) at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:701) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:838) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:904) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:182) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:243) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:721) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:781) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1242) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:124) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:149) at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86) at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:102) at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206) NPE in ast parser: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.packageCollidesWithType(ProblemReporter.java:5435) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.buildTypeBindings(CompilationUnitScope.java:87) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.buildTypeBindings(LookupEnvironment.java:149) at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:701) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376) at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:808) at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:518) at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:908) at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:657) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:544) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:537) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:478) at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:126) at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:169) at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:154) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
I gave it a quick try, so here's a proposed implementation (not a patch because I had no pristine JDT/Core at hand): public void packageCollidesWithType(CompilationUnitDeclaration compUnitDecl) { String packageName = ""; int start = 0, end = 0; if (compUnitDecl.currentPackage != null) { packageName = CharOperation.toString(compUnitDecl.currentPackage.tokens); start = compUnitDecl.currentPackage.sourceStart; end = compUnitDecl.currentPackage.sourceEnd; } else if (compUnitDecl.scope != null && compUnitDecl.scope.currentPackageName != null) { packageName = CharOperation.toString(compUnitDecl.scope.currentPackageName); // no useful source position available } String[] arguments = new String[] {packageName}; this.handle( IProblem.PackageCollidesWithType, arguments, arguments, start, end); }
Reproduced with this case : p1/C1.java: package p1; public class C1 {} p1/C1/C2.java: public class C2 {} // NOTE: no package statement
Created attachment 118397 [details] Proposed patch with testcase
Fix and test released for 3.5M4
Verified for 3.5M4 using I20081208-1800