2012-04-05 66 views
1

我正在使用編譯器Tree api來將我的代碼解析到AST中,但visitCompilationUnit方法從未被調用,通過visitClass被調用的方法,我做錯了什麼?編譯單元訪問者 - Java編譯器樹api

第二個問題:有什麼辦法可以告訴編譯器截斷編譯後的代碼(我只在AST中被捕獲,而不是在類文件中)。

謝謝。

@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); 
    } 
} 

回答