java - 如何在eclipse jdt中使用代码查找成员变量是否在方法中使用?

标签 java eclipse abstract-syntax-tree visitor-pattern

我必须找到类中使用特定成员变量的所有方法。 (就像 Eclipse 中的“引用”,但我想使用代码来实现...)我使用 AST 访问者模式来访问 FieldDeclaration 来获取所有成员变量的名称和类型。我还使用访问者模式来访问 MethodDeclaration 节点,以使用 getBody() 获取每个方法的内容。现在我有了字段变量名称、类型和成员方法详细信息。我想我可以对每个成员方法的内容使用字符串搜索,但是对于变量名“a”,搜索可能会为“class”等关键字返回 true!有没有办法找到与 fieldDeclaration 对应的特定变量的用法? (比如 Binding 之类的??)如果是这样,AST 节点或类是什么?

这是我使用的代码...

 SimpleNameVisitor simpleNameVisitor=new SimpleNameVisitor();
 //SimpleNameVisitor is the visitor pattern for SimpleName
 simpleNameVisitor.process(mthd.getMethodBlock());
 //mthd is the object that stores method details
 for(SimpleName simpName:simpleNameVisitor.getIdentifiers()){
    if(varName.contentEquals(simpName.getFullyQualifiedName())){
        //varName is the field variable name
        System.out.println("MethodName: "+mthd.getName());
        return;
    }
  }

这是解决问题的代码(由wjans建议;更改为contentEquals)

VariableDeclarationFragment fragment = ... ;
IBinding binding = fragment.getName().resolveBinding();


public boolean visitNode(SimpleName simpleName) throws Exception {
if (binding.toString().contentEquals(simpleName.resolveBinding().toString()) {
    ....
}

}

最佳答案

你可以这样做:

保留对 FieldDeclaration 绑定(bind)的引用,

VariableDeclarationFragment fragment = ... ;
IBinding binding = fragment.getName().resolveBinding();

并在访问 MethodDeclaration 内的 SimpleName 时使用它与绑定(bind)进行比较

public boolean visitNode(SimpleName simpleName) throws Exception {
    if (binding.equals(simpleName.resolveBinding()) {
        ....
    }
}   

关于java - 如何在eclipse jdt中使用代码查找成员变量是否在方法中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6016647/

相关文章:

javascript - 如何让 @babel/parser 将 'undefined' 识别为特殊标记?

java - Unicode 日语长音标记从假名脚本中排除?

c - 如何在程序中自动插入 pragma

java - 从类对象的方法接收空指针异常

android - 和 + Eclipse : How to change main-activity to sub-activity

java - 插件依赖项有一个包,我收到 "type <type> cannot be resolved"错误

java - 从 Java 应用程序中运行 ANTRL TestRig GUI

java - 在 Java 中使用 ASTParser 实现 Metric Suite

java - 是否应该返回传递的参数只是为了表明 Java 中的可变性

java - 如何检查整数变量中是否存在数字?