2012-12-20 20 views
6

Korzystanie JavaParser mogę uzyskać listę moich metod i pól przy użyciu:Jaki jest prawidłowy sposób analizowania zmiennych za pomocą 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()); 
     } 
    } 
} 

Ale nie mogę dowiedzieć się, jak uzyskać listę moich zmiennych. Po prostu chcę listę wszystkich zmiennych ze źródła java, niezależnie od zakresu.

+2

Jeśli znalazłeś odpowiedź na swoje pytanie, nie edytuj: możesz na nie odpowiedzieć! –

+0

@Danilo Dzięki za to nie miałem pojęcia. – ialexander

+0

Wystarczy edytować pytanie, aby usunąć rozwiązanie, a następnie wkleić je z powrotem jako odpowiedź. –

Odpowiedz

8

Rozwiązaniem było utworzenie klasy odwiedzającej, która rozszerza VoidVisitorAdapter i zastępuje metodę visit(). Kod następująco:

@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

Należy zauważyć, że w oparciu o rozwiązania, oryginalny aukcja pole może być wykonana za pomocą następującego kodu:

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

Nie zapomnij zadzwonić super.visit, jeśli są nadrzędne wiele metod odwiedzania w adapterze gości.

0

robocza:

W metodzie klasy VoidVisitorAdaptervisit(FieldDeclaration n, Object arg) dodaje może być stosowany do ekstrakcji zmienne.

Poda dokładną nazwę zmiennych zainicjowanych lub nie.

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

Dzięki @Pang do edycji odpowiedzi. Jestem nowy na tej stronie i chcę się uczyć plus przyczynić. –

Powiązane problemy