Bug 249027 - NPE in Engine if type collides with a package
Summary: NPE in Engine if type collides with a package
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.4.1   Edit
Hardware: Other Linux
: P3 normal (vote)
Target Milestone: 3.5 M3   Edit
Assignee: David Audel CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-09-29 15:29 EDT by Stephan Herrmann CLA
Modified: 2008-10-27 13:21 EDT (History)
0 users

See Also:


Attachments
Proposed fix (4.05 KB, patch)
2008-10-22 09:04 EDT, David Audel CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Stephan Herrmann CLA 2008-09-29 15:29:18 EDT
Build ID: M20080911-1700

consider these classes:

p1/C1.java:
package p1;
public class C1 {}

p1/C1/C2.java:
package p1.C1; // this package collides with a type
public class C2 {
  C1 f; // <- select here
}

Select reference "C1" in C2 and wait for hover.
Instead an NPE is logged to the error view:

java.lang.NullPointerException
at org.eclipse.jdt.internal.codeassist.impl.Engine.initializeImportCaches(Engine.java:103)
at org.eclipse.jdt.internal.codeassist.impl.Engine.mustQualifyType(Engine.java:141)
at org.eclipse.jdt.internal.codeassist.SelectionEngine.acceptType(SelectionEngine.java:158)
at org.eclipse.jdt.internal.core.SearchableEnvironment$4.acceptType(SearchableEnvironment.java:371)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine$2.acceptIndexMatch(BasicSearchEngine.java:779)
at org.eclipse.jdt.internal.core.search.matching.InternalSearchPattern.acceptMatch(InternalSearchPattern.java:47)
at org.eclipse.jdt.internal.core.search.matching.InternalSearchPattern.findIndexMatches(InternalSearchPattern.java:88)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:269)
at org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:97)
at org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:63)
at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:276)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllTypeNames(BasicSearchEngine.java:790)
at org.eclipse.jdt.internal.core.SearchableEnvironment.findTypes(SearchableEnvironment.java:377)
at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:719)
at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:161)
at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:363)
at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:357)
at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:116)
at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:498)
at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:494)
at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129)
at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:82)
at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166)



The null is in 
  this.unitScope.fPackage
At that point the desired package name is available as
  this.unitScope.referenceContext.currentPackage.tokens
but if no package declaration is present, this will obviously NPE, too.
Comment 1 Stephan Herrmann CLA 2008-09-29 15:46:47 EDT
If you want to see more delete the package declaration in C2:

java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.packageCollidesWithType(ProblemReporter.java:5414)
	at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.buildTypeBindings(CompilationUnitScope.java:87)
	at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.buildTypeBindings(LookupEnvironment.java:147)

(this NPE is actually somewhat obtrusive ..)

The same problem would also occur (I guess) if mustSpecifyPackage is 
reported. I wasn't, however, able to easily trigger that error.
(Is it actually raised?)
Comment 2 David Audel CLA 2008-10-22 07:17:22 EDT
The bug descibed in comment 1 is not the same as bug described in comment 0.

I filed a new bug report for problem 2 (bug 251690).
Comment 3 David Audel CLA 2008-10-22 09:04:58 EDT
Created attachment 115805 [details]
Proposed fix
Comment 4 David Audel CLA 2008-10-22 09:06:45 EDT
Released for 3.5M3

Tests added
  ResolveTests2#testBug249027a() -> testBug249027b()
Comment 5 Jerome Lanneluc CLA 2008-10-27 13:21:26 EDT
Verified for 3.5M3 using I20081026-2000