1

你好,

我正在开发一个 Eclipse 插件。我需要使用 ASTjdt.core.dom 或类似的东西在源代码中找到所有引用。我需要这些引用ASTNodes,以便获取父节点并检查表达式中涉及引用的几件事。预先感谢。


编辑:

我想再具体一点,我的问题是我试图捕获一些对常量的引用,但是......我不知道如何才能在匹配中捕获这些引用。我需要检查涉及对确定常量的引用的表达式。我只得到使用它们的方法的来源。

我认为问题在于范围或模式:

pattern = SearchPattern.createPattern(field, IJavaSearchConstants.REFERENCES);


scope = SearchEngine.createJavaSearchScope(declaringType.getMethods());

预先感谢!

4

1 回答 1

3

我使用了类似的东西:

  1. 搜索方法的声明,返回一个 IMethod
  2. 搜索对 IMethod 的引用,记录那些 IMethod
  3. 对于每个返回的 IMethod,从其编译单元创建一个 AST

搜索声明或引用类似于以下代码。

SearchRequestor findMethod = ...; // do something with the search results
SearchEngine engine = new SearchEngine();
IJavaSearchScope workspaceScope = SearchEngine.createWorkspaceScope();
SearchPattern pattern = SearchPattern.createPattern(searchString,
            IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS,
            SearchPattern.R_EXACT_MATCH);
SearchParticipant[] participant = new SearchParticipant[] { SearchEngine
            .getDefaultSearchParticipant() };
engine.search(pattern, participant, workspaceScope, findMethod,
                monitor);

获得 IMethod 引用后,您可以使用以下方法访问 AST:

ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
if (methodToSearch.isBinary()) {
    parser.setSource(methodToSearch.getClassFile());
} else {
    parser.setSource(methodToSearch.getCompilationUnit());
}
CompilationUnit cu = (CompilationUnit) parser.createAST(null);

有关java 搜索、java 模型和 AST 的更多详细信息,请参阅http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_int_core.htm 。

于 2011-05-04T18:05:41.673 回答