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