JDT SearchEngine抛出NullPointerException

时间:2012-12-24 09:57:02

标签: eclipse-jdt

我正在尝试使用JDT SearchEngine来查找对给定对象的引用。但是在调用org.eclipse.jdt.core.search.SearchEngine的“搜索”方法时,我得到了一个“NullPointerException”。

以下是错误跟踪:

  

java.lang.NullPointerException at   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()”的参数的值:

enter image description here

我认为这个问题是因为“范围”的价值[在'BLACK'中突出显示]。 这意味着“SearchEngine.createWorkspaceScope()”在这种情况下不会返回预期值。

注意:请注意,这是我的程序的一部分,它作为独立的Java程序(不是eclipse插件)运行,使用JDT API来解析给定的源代码(使用JDT- AST)。

在这种情况下是不是可以使用JDT SearchEngine(非eclipse插件程序),还是由于其他原因导致这个问题? 真的很感激你的答案。

1 个答案:

答案 0 :(得分:3)

没有。如果不打开工作区,则无法使用搜索引擎。原因是SearchEngine依赖于eclipse文件系统抽象(IResourceIFileIFolder等。这仅在工作区打开时可用。