我必须找到类中使用特定成员变量的所有方法。 (就像 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/