Как получить имена переменных, используемые внутри метода класса, используя javaparser

#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