如何在eclipse中搜索对AST或编译单元上的字段的引用?

如何在eclipse中搜索对AST或编译单元上的字段的引用?,eclipse,scope,design-patterns,abstract-syntax-tree,eclipse-jdt,Eclipse,Scope,Design Patterns,Abstract Syntax Tree,Eclipse Jdt,嗨 我正在开发一个Eclipse插件。我 需要在中查找所有引用 源代码使用AST或jdt.core.dom 或者类似的。我需要这个 引用,如ASTNodes,以便 获取父节点并检查几个 表达中的事物在哪里 涉及参考文献。 先谢谢你 编辑: 我想具体一点,我的问题是,我试图抓住一些常数的引用,但。。。我不知道如何才能抓住这场比赛。我需要检查引用已确定常数的表达式。我只得到使用它们的方法的来源 我认为问题在于范围或模式: pattern = SearchPattern.createPattern(

我正在开发一个Eclipse插件。我 需要在中查找所有引用 源代码使用AST或
jdt.core.dom
或者类似的。我需要这个 引用,如
ASTNodes
,以便 获取父节点并检查几个 表达中的事物在哪里 涉及参考文献。 先谢谢你


编辑:

我想具体一点,我的问题是,我试图抓住一些常数的引用,但。。。我不知道如何才能抓住这场比赛。我需要检查引用已确定常数的表达式。我只得到使用它们的方法的来源

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

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


scope = SearchEngine.createJavaSearchScope(declaringType.getMethods());
事先谢谢

我使用了类似于:

  • 搜索一个声明 方法,返回一个IMethod
  • 搜索对 我的方法,记录下那些我的方法
  • 对于返回的每个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的更多详细信息,请参阅。

    重点是。。。我不明白你是如何迭代结果的(第三点)。如何创建一个迭代块来处理每个结果?。谢谢,对不起我的英语!请参阅我的算法示例。感谢您的代码,但是。。。我认为问题在我的范围之内。我需要查找语句,但我有一个作用域:“scope=SearchEngine.createJavaSearchScope(declaringType.getMethods());”我如何获得语句而不是方法?事实上可能吗?