Bug 304841

Summary: [search] NPE in IndexSelector.initializeIndexLocations
Product: [Eclipse Project] JDT Reporter: Markus Keller <markus.kell.r>
Component: CoreAssignee: Frederic Fusier <frederic_fusier>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: Olivier_Thomann
Version: 3.6   
Target Milestone: 3.6 M6   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
Proposed patch
none
New proposed patch none

Description Markus Keller CLA 2010-03-05 11:43:49 EST
N20100304-2130, looks like a regression from bug 102279

- put this into a CU called "Hello.java":

package p;
class One {
}
class Two {
}

- search for references to Two

=> NPE:

!ENTRY org.eclipse.core.jobs 4 2 2010-03-05 17:36:23.577
!MESSAGE An internal error occurred during: "Java Search".
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jdt.internal.core.search.IndexSelector.initializeIndexLocations(IndexSelector.java:202)
	at org.eclipse.jdt.internal.core.search.IndexSelector.getIndexLocations(IndexSelector.java:281)
	at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.selectIndexes(JavaSearchParticipant.java:107)
	at org.eclipse.jdt.internal.core.search.PatternSearchJob.getIndexes(PatternSearchJob.java:79)
	at org.eclipse.jdt.internal.core.search.PatternSearchJob.ensureReadyToRun(PatternSearchJob.java:50)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:174)
	at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:222)
	at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:523)
	at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:613)
	at org.eclipse.jdt.internal.ui.search.JavaSearchQuery.run(JavaSearchQuery.java:144)
	at org.eclipse.search2.internal.ui.InternalSearchUI$InternalSearchJob.run(InternalSearchUI.java:91)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 Markus Keller CLA 2010-03-05 11:48:40 EST
Workaround is to disable Auto Build.

The bug is that the code does not consider that ITypeRoot#findPrimaryType() may be null.
Comment 2 Frederic Fusier CLA 2010-03-05 11:50:41 EST
I'll fix this for M6...
Comment 3 Frederic Fusier CLA 2010-03-08 05:46:22 EST
Created attachment 161273 [details]
Proposed patch

This patch adds the missing null check and a test to verify that this NPE won't happen again...
Comment 4 Frederic Fusier CLA 2010-03-08 07:47:04 EST
Created attachment 161283 [details]
New proposed patch

This patch also fixes a potential CCE...
Comment 5 Frederic Fusier CLA 2010-03-08 09:28:34 EST
(In reply to comment #4)
> Created an attachment (id=161283) [details]
> New proposed patch
> 
Released for 3.6M6 in HEAD stream.
Comment 6 Olivier Thomann CLA 2010-03-09 15:53:30 EST
Verified for 3.6M6 using I20100309-0809 that I no longer get a NPE inside the indexes.
Now I get:
java.lang.NullPointerException
at org.eclipse.ui.part.PageBookView.createPage(PageBookView.java:415)
at org.eclipse.ui.part.PageBookView.partActivated(PageBookView.java:757)
at org.eclipse.search2.internal.ui.SearchView.partActivated(SearchView.java:319)
at org.eclipse.search2.internal.ui.SearchView.internalShowSearchPage(SearchView.java:403)
at org.eclipse.search2.internal.ui.SearchView.showSearchResult(SearchView.java:374)
at org.eclipse.search2.internal.ui.SearchViewManager.showNewSearchQuery(SearchViewManager.java:70)
at org.eclipse.search2.internal.ui.SearchViewManager$1.queryAdded(SearchViewManager.java:47)
at org.eclipse.search2.internal.ui.QueryManager.fireAdded(QueryManager.java:93)
at org.eclipse.search2.internal.ui.QueryManager.addQuery(QueryManager.java:70)
at org.eclipse.search2.internal.ui.InternalSearchUI.addQuery(InternalSearchUI.java:309)
at org.eclipse.search2.internal.ui.InternalSearchUI.runSearchInBackground(InternalSearchUI.java:167)
at org.eclipse.search.ui.NewSearchUI.runQueryInBackground(NewSearchUI.java:132)
at org.eclipse.search.ui.NewSearchUI.runQueryInBackground(NewSearchUI.java:105)
at org.eclipse.jdt.internal.ui.search.SearchUtil.runQueryInBackground(SearchUtil.java:79)
at org.eclipse.jdt.ui.actions.FindAction.performNewSearch(FindAction.java:284)
at org.eclipse.jdt.ui.actions.FindAction.run(FindAction.java:267)
at org.eclipse.jdt.ui.actions.FindReferencesAction.run(FindReferencesAction.java:101)
at org.eclipse.jdt.ui.actions.FindAction.run(FindAction.java:230)
at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchA
Comment 7 Olivier Thomann CLA 2010-03-09 16:17:11 EST
This seems to be related to bug 305156.