1

我正在使用 JDT AST 来解析给定的源。我想在使用 AST 时触发相关访问者时找到给定对象/变量的引用。例如:考虑以下代码:

public class SampleClass {
    public void printMe(){
        System.out.println("hello");
    }

    public static void main(String a[]){
        SampleClass s =new SampleClass();
        // do some other work
        s.printMe();
    }
}

当我在解析上面的代码时,当涉及到“s”的变量声明时,它会调用“VariableDeclarationFragment”类型的visitor方法。那时我想在访问其余代码行之前找出变量“s”的所有引用。这可能吗?我想到了使用 JDT SearchEngine 并在那时调用以分别解析引用。但是没有成功。我可以只使用 AST 本身吗?

请注意,我在独立程序中使用 JDT AST,而不是作为 Eclipse 插件项目。在这种情况下我是否可以使用 SearchEngine 我有点困惑,因为它无法解析给定代码单元(类、方法等)的 IJava* 类型。请分享您的专业知识来解决这个问题。

4

1 回答 1

1

使用搜索引擎是多余的。搜索引擎用于跨文件搜索。而且,如果没有启动工作台(即后台没有 Eclipse 实例),您将无法使用搜索引擎。

看起来您只想在同一个文件中查找对变量的引用。您最好的选择是创建一个访问者,该访问者将访问整个文件并查找对变量的引用。由于这些是变量,并且它们的作用域不会转义它们声明的方法,因此您只需要访问该方法。

像这样的东西:

class MyVariableVisitory extends ASTVisitor {
    public boolean visit(SimpleName node) {
        if (node.getIdentifier().equals(variableToLookFor)) {
            acceptMatch(node);
        }
        return true;
    }
}

由于您只是在寻找对变量的引用,因此您只需要查看Nameast 节点。

于 2012-12-27T16:44:24.860 回答