2012-12-20 12 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()); 
     } 
    } 
} 

लेकिन मैं समझ नहीं कैसे मेरे चरों की सूची प्राप्त करने के लिए। मैं बस जावा स्रोत से सभी चरों की एक सूची चाहता हूं, भले ही गुंजाइश।

+2

यदि आपको अपने प्रश्न का उत्तर मिल गया है, तो इसे संपादित न करें: इसका उत्तर देने में संकोच न करें! –

+0

@Danilo इसके लिए धन्यवाद मुझे नहीं पता था। – ialexander

+0

समाधान को हटाने के लिए बस अपना प्रश्न संपादित करें, और उसके बाद इसे उत्तर के रूप में पेस्ट करें। –

उत्तर

8

समाधान विज़िटर क्लास बनाना था जो VoidVisitorAdapter को बढ़ाता है और विज़िट() विधि को ओवरराइड करता है। कोड इस प्रकार है:

@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

धन्यवाद मेरे उत्तर को संपादित करने के लिए @ पांग। मैं इस साइट पर नया हूं और प्लस योगदान सीखना चाहता हूं। –

संबंधित मुद्दे