2012-12-20 88 views
6

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

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

+2

如果你已经找到了你的问题的答案,不要编辑它:随时回答! –

+0

@Danilo谢谢你,我不知道。 – ialexander

+0

只需编辑您的问题即可删除解决方案,然后将其作为答案粘贴回去。 –

回答

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

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

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

不要忘记调用super.visit,如果你是压倒一切访客适配器中的多种访问方法。

0

工作:

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

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

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. 
     } 
    } 
} 
+0

感谢@Pang编辑我的答案。我是这个网站的新手,想要学习和贡献。 –

相关问题