使用JavaParser解析变量的正确方法是什么?

ial*_*der 7 java javaparser

使用JavaParser我可以使用以下方法获取我的方法和字段列表:

//List of all methods
System.out.println("Methods: " + this.toString());
List<TypeDeclaration> types = n.getTypes();
for (TypeDeclaration type : types)
{
    List<BodyDeclaration> members = type.getMembers();
    for (BodyDeclaration member : members)
    {
        if (member instanceof MethodDeclaration)
        {
            MethodDeclaration method = (MethodDeclaration) member;
            System.out.println("Methods: " + method.getName());
        }
    }
}

//List all field variables.
System.out.println("Field Variables: " + this.toString());
List<TypeDeclaration> f_vars = n.getTypes();
for (TypeDeclaration type : f_vars)
{
    List<BodyDeclaration> members = type.getMembers();
    for (BodyDeclaration member : members)
    {
        if (member instanceof FieldDeclaration)
        {
            FieldDeclaration myType = (FieldDeclaration) member;
            List <VariableDeclarator> myFields = myType.getVariables();
            System.out.println("Fields: " + myType.getType() + ":" + myFields.toString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何获取我的变量列表.我只想要一个来自java源的所有变量的列表,无论范围如何.

ial*_*der 8

解决方案是创建一个扩展VoidVisitorAdapter并覆盖visit()方法的访问者类.代码如下:

@Override
public void visit(VariableDeclarationExpr n, Object arg)
{      
    List <VariableDeclarator> myVars = n.getVars();
        for (VariableDeclarator vars: myVars){
            System.out.println("Variable Name: "+vars.getId().getName());
            }
}
Run Code Online (Sandbox Code Playgroud)