2012-04-05 6 views
1

Ich benutze den Compiler Tree API, um meinen Code in eine AST zu analysieren, aber die Methode visitCompilationUnit wird nie aufgerufen, durch die Methode visitClass heißt, was mache ich falsch?Compilation Unit Besucher - Java Compiler Baum api

Zweite Frage: Gibt es eine Möglichkeit, den Compiler zu sagen, den kompilierten Code abzuschneiden (ich interessiere mich nur für die AST, nicht in der Klassendatei).

Danke.

@SupportedSourceVersion(value=SourceVersion.RELEASE_7) 
@SupportedAnnotationTypes("*") 
public class Parser extends AbstractProcessor { 
. 
. 
. 
    @Override 
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) { 
     for (Element e : roundEnvironment.getRootElements()) { 
      System.out.println(e + "***"); 
      TreePath tp = trees.getPath(e); 
      // invoke the scanner 
      rootVisitor.scan(tp, trees); 
     } 
     return true; 
    } 
} 



public class OdpaVisitor extends TreePathScanner<Object, Trees> { 

    protected RepositoryIface repository; 

    private String pckg; 

    public OdpaVisitor(RepositoryIface repository) { 
     this.repository = repository; 
    } 

    @Override 
    public Object visitCompilationUnit(CompilationUnitTree node, Trees p) { 
     repository.savePackage(node.getPackageName().toString()); 
     this.pckg = node.getPackageName().toString(); 
     return super.visitCompilationUnit(node, p); 
    }  

    @Override 
    public Object visitClass(ClassTree node, Trees p) { 
     repository.saveClass(node.getSimpleName().toString(), pckg); 
     return super.visitClass(node, p); 
    } 
} 

Antwort