2012-04-05 3 views
1

컴파일러 트리 API를 사용하여 내 코드를 AST로 구문 분석하지만 visitCompilationUnit 메소드는 호출되지 않습니다. visitClass 메소드가 호출되었는데, 무엇을 잘못하고 있습니까?컴파일 유닛 방문자 - Java 컴파일러 트리 ap

두 번째 질문 : 컴파일 된 코드를 자르려면 어떤 방법이 있습니까 (클래스 파일이 아닌 AST에서만 interrest 됨).

감사합니다.

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

답변