我可以在从JDT AST解析源时使用JDT搜索引擎吗?

时间:2012-12-23 15:49:20

标签: reference abstract-syntax-tree eclipse-jdt

我正在使用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 *类型。 请分享您的专业知识以解决这个问题。

1 个答案:

答案 0 :(得分:1)

使用搜索引擎是过度的。搜索引擎用于跨文件搜索。并且,如果没有工作台启动(即 - 在后台没有Eclipse实例),则无法使用搜索引擎。

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

这样的事情:

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

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