Eclipse JDT:Java搜索引擎

时间:2017-04-05 20:36:34

标签: eclipse eclipse-jdt

我需要在所有项目中找到所有Java类型(classe,interface,enum,annotation)'工作空间的源目录,名称为String。例如,输入"测试"将返回名称以&#34开始的所有Java类型;测试"在所有项目源目录中定义。我尝试用JDT的SearchEngine处理这个问题,如下所示

SearchPattern pattern = SearchPattern.createPattern("Test",
            IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS,
            SearchPattern.R_PREFIX_MATCH);
IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
SearchRequestor requestor = new SearchRequestor() {
        public void acceptSearchMatch(SearchMatch match) {
            System.out.println("Found: " + match.getElement());
        }
};
SearchEngine searchEngine = new SearchEngine();
try {
        searchEngine.search(pattern, new SearchParticipant[] { SearchEngine
                        .getDefaultSearchParticipant() }, scope, requestor,
                        null);
} catch (CoreException e) {
        e.printStackTrace();
}

上面的代码返回了一些不在Eclipse工作区中的java类型。例如:

找到:TestSimple(未打开)[在TestSimple.class [in< default> [in / home / me / test]]]

TestSimple.java是从我的主目录中的命令行创建的文件,它与Eclipse项目无关。 (我的Eclipse工作区在/ home / me / eclipse / workspace中定义。)我不确定为什么它包含在搜索结果中? SearchEngine是处理这种情况的最佳方式,因为我只需要java类型的名称,我不需要在类,如字段,方法或引用中的任何内容?感谢

1 个答案:

答案 0 :(得分:0)

您可能希望构建一个更有限的搜索范围,然后向每个IJavaProject询问其所有包片段根(IJavaProject#getAllPackageFragmentRoots()),并仅包括从K_SOURCE返回IPackageFragmentRoot#getKind()的那些避免从引用的库中获取类型。对名称的搜索不应该比命中已经存储的索引做更多的事情。你不能仅仅依赖文件名,因为它会完全错过内部类。