8

使用 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());
        }
    }
}

但我不知道如何获取我的变量列表。我只是想要一个来自 java 源的所有变量的列表,而不管范围如何。

4

3 回答 3

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());
            }
}
于 2012-12-20T19:25:22.817 回答
2

请注意,根据您的解决方案,可以使用以下代码完成原始字段列表:

@Override
public void visit(FieldDeclaration n, Object arg) {
    System.out.println(n);
    super.visit(n, arg);
}

如果您在访问者适配器中覆盖多个访问方法,请不要忘记调用 super.visit。

于 2014-01-28T19:44:16.137 回答
1

在职的:

在类的visit(FieldDeclaration n, Object arg)方法中VoidVisitorAdapter,可以使用以下方法来提取变量。

它将给出变量的确切名称,无论是否初始化。

String newstr;
List<VariableDeclarator> list = n.getVariables();
//as getVariables() returns a list we need to implement that way 
for (VariableDeclarator var : list) {

    String item = var.toString();

    if (item.contains("=")) {

        if (item != null && item.length() > 0) {

            int index = item.lastIndexOf("=");
            newstr = item.substring(0, index);
            newstr = newstr.trim();
            variablename = newstr;`
            //variablename is the name of the desired variable.
        }
    } 
}
于 2015-10-24T01:59:13.337 回答