2012-12-20 115 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編輯我的答案。我是這個網站的新手,想要學習和貢獻。 –

相關問題