Мне нужно найти все методы в классе, которые используют конкретную переменную-член. (например, «Ссылки» в Eclipse, но я хочу реализовать с помощью кода ...) Я использую шаблон посетителя AST, который посещает FieldDeclaration, чтобы получить имя и тип всех переменных-членов. Я также использую шаблон посетителей, который посещает узлы MethodDeclaration, чтобы получить содержимое каждого метода, используя getBody (). Теперь у меня есть имя переменной поля, тип и детали метода члена. Я думал, что могу использовать поиск строки по содержимому каждого метода-члена, но для имени переменной «a» поиск может вернуть true для ключевых слов, таких как «класс» и других тоже !!! Есть ли способ найти использование определенной переменной, соответствующей fieldDeclaration ?? (например, Binding или что-то в этом роде?). Если да, то что такое AST Node или Class?
Вот код, который я использовал ...
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()) {
....
}
}