JavacTask
JavacTask (javac 컴파일러 전용 기능 접근)
JDK의 자바 컴파일러인 javac에 특화된 기능에 접근할 수 있게 해 주는 추상 클래스입니다. JavaCompiler.CompilationTask를 구현하면서, 일반 컴파일 작업 API로는 부족한 javac 고유의 트리·요소·타입 처리 기능을 제공해요.
본문
JavacTask를 얻는 기본 방법은 정적 메서드 instance(ProcessingEnvironment)를 호출하는 것입니다. 만약 컴파일러가 CompilationTask를 통해 실행 중이라면 그 작업이 그대로 반환돼요.
컴파일 단계 실행
-
parse()— 지정된 파일들을 파싱해 추상 구문 트리 목록을 반환합니다. -
analyze()— 모든 분석을 완료하고, 분석된 요소 목록을 돌려줍니다. -
generate()— 코드를 생성하고, 생성된 파일 목록을 반환해요.
각 메서드는 컴파일러에서 처리하지 못한 I/O 오류가 있으면 IOException을, 지금 이 단계에서는 작업을 수행할 수 없으면 IllegalStateException을 던질 수 있습니다.
유틸리티와 리스너
-
getElements()— 프로그램 요소를 다루기 위한Elements유틸리티를 반환해요. -
getTypes()— 타입 미러를 다루기 위한Types유틸리티를 반환합니다. -
getTypeMirror(Iterable<? extends Tree> path)— 지정한 경로가 결정하는 트리 노드의 타입 미러를 반환합니다. 다만 이 메서드는Trees의 메서드로 대체되었으니 참고만 해 두세요. -
setTaskListener(TaskListener)/addTaskListener(TaskListener)/removeTaskListener(TaskListener)— 컴파일 진행 상황 이벤트를 받을 리스너를 설정·추가·제거합니다.setTaskListener는 기존 리스너를 제거하고 새 리스너를 등록하는 것과 같아요. -
setParameterNameProvider(ParameterNameProvider provider)— 메서드 매개변수의 신뢰할 만한 이름을 찾지 못했을 때 사용할 이름 제공자를 설정합니다. 새 제공자를 설정하면 이전 제공자는 더 이상 조회되지 않아요.