我正在尝试使用JDT SearchEngine查找对给定对象的引用。但是,我在调用org.eclipse.jdt.core.search.SearchEngine的“搜索”方法时遇到了“NullPointerException”。
错误跟踪如下:
java.lang.NullPointerException在
org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:214)
在
org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:515)
在
org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:582)
以下是我用来执行搜索的方法:
private static void search(String elementName) { //elementName -> a method Name
try {
SearchPattern pattern = SearchPattern.createPattern(elementName, IJavaSearchConstants.METHOD,
IJavaSearchConstants.REFERENCES, SearchPattern.R_PATTERN_MATCH);
IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
SearchRequestor requestor = new SearchRequestor() {
@Override
public void acceptSearchMatch(SearchMatch match) {
System.out.println("Element - " + match.getElement());
}
};
SearchEngine searchEngine = new SearchEngine();
SearchParticipant[] searchParticipants = new SearchParticipant[] { SearchEngine
.getDefaultSearchParticipant() };
searchEngine.search(pattern, searchParticipants, scope, requestor, null);
} catch (Exception e) {
e.printStackTrace();
}
}
请参考以下快照的“变量”窗口,以检查传递给“searchEngine.search()”的参数的值:
我认为问题是由于“作用域”的值引起的(在上面的“黑色”中突出显示)。
这意味着“SearchEngine.createWorkspaceScope()”在这种情况下不会返回期望值。
注意:请注意,这是我程序的一部分,它作为独立的Java程序(不是eclipse插件)运行,使用JDT API解析给定的源代码(使用JDT-AST)。
在这种情况下(非eclipse插件程序)是否可以使用JDT SearchEngine,还是由于其他原因导致此问题?
非常感谢您对此的回答。
最佳答案
不可以。您必须先打开工作空间才能使用搜索引擎。原因是SearchEngine依赖于eclipse文件系统抽象(IResource
,IFile
,IFolder
等)。仅在工作空间打开时才可用。