我正在使用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 *类型。 请分享您的专业知识以解决这个问题。
答案 0 :(得分:1)
使用搜索引擎是过度的。搜索引擎用于跨文件搜索。并且,如果没有工作台启动(即 - 在后台没有Eclipse实例),则无法使用搜索引擎。
看起来您只想在同一文件中找到对变量的引用。这里最好的选择是创建一个访问者,该访问者将访问整个文件并查找对变量的引用。由于这些是变量,并且它们的范围不会逃避声明它们的方法,因此您只需要访问该方法。
这样的事情:
class MyVariableVisitory extends ASTVisitor {
public boolean visit(SimpleName node) {
if (node.getIdentifier().equals(variableToLookFor)) {
acceptMatch(node);
}
return true;
}
}
由于您只是在寻找对变量的引用,因此您只需要查看Name
个ast节点。