#java #javaparser
#java #javaparser
Вопрос:
Класс, который я анализирую:
public class Users{
private String name = "Jacob";
private String address = "711 11th Ave, New York";
private int age = 28;
public String verifyAgeLimit() {
String msg = (this.age < 16) ? " is not allwed to use it." : " is Allwed to use it.";
return this.name msg;
}
public String showName() {
return "User name is:" this.name;
}
public String showAddress() {
return this.address;
}
public String hello() {
return "Hello World";
}
}
Я пытаюсь получить имена переменных, используя MethodDeclaration, но не могу этого сделать.
public void visit(MethodDeclaration n, Object arg) {
System.out.println(n.getName().toString());//It displays the full method
super.visit(n, arg);
}
Я пытаюсь получить выходные данные для этого.
verifyAgeLimit() : this.name или имя
verifyAgeLimit() : this.name или имя
showAddress() : this.address или адрес
Я попытался преобразовать весь метод в sting и прочитать строку, чтобы узнать имена, но это становится слишком сложным и очень менее точным.
Есть ли какой-нибудь способ решить эту проблему?
Комментарии:
1.Сейчас я использую JP, но я не очень «продвинутый». Я попробовал это сегодня, я думаю, что ваш
Visitor
вариант в самый раз, но затем вам нужно добавить второйVisitor
кwalk
методу. Это прямо здесь:accept(VoidVisitor...)
и тогда этот метод должен помочь …walk(...)
.
Ответ №1:
Имена используемых переменных хранятся NameExpr
узлами, а поля FieldAccessExpr
— узлами. Добавьте для них посетителя или иным образом выполните к ним рекурсию.
Комментарии:
1. С помощью NameExpr он может получать переменные, объявленные внутри методов, а не переменные класса.
2. @RajB009 они в
FieldAccessExpr