TaskListener

TaskListener (컴파일 작업 감시 리스너)

javac 컴파일러의 활동을 감시하기 위한 리스너 인터페이스입니다. 컴파일 작업이 시작되거나 끝날 때 이벤트를 받아서, 진행 상황에 맞춰 추가 로직을 수행할 수 있어요.

출처: Java API Reference

본문

TaskListener는 컴파일 과정에서 발생하는 작업 단위의 시작과 종료를 통보받는 통로입니다. javac 플러그인이 흔히 이 리스너를 등록해 컴파일 진행 이벤트를 받고, 나머지 작업을 처리하는 구조예요. JavacTask.addTaskListener(...), setTaskListener(...) 등으로 등록합니다.

이벤트는 TaskEvent 객체로 전달되는데, 어떤 종류의 작업인지(TaskEvent.Kind)와 그 작업에 연결된 소스 파일·컴파일 단위·타입 요소 정보를 함께 담고 있어요. 리스너 입장에서는 이벤트의 종류와 관련 객체를 통해 지금 컴파일이 어느 단계에 왔는지를 파악할 수 있습니다.

메서드

  • started(TaskEvent e) — 이벤트가 시작되었을 때 호출됩니다. 기본 구현은 아무것도 하지 않아요.
  • finished(TaskEvent e) — 이벤트가 완료되었을 때 호출됩니다. 기본 구현은 아무것도 하지 않습니다.

두 메서드 모두 기본 구현이 있으므로, 필요한 쪽만 오버라이드해서 사용하면 돼요. 예를 들어 특정 단계가 완료될 때만 로그를 남기고 싶다면 finished만 구현하면 됩니다.

이 리스너는 컴파일러의 내부 진행 상황을 외부에서 관찰할 수 있게 해 주는 창구 역할을 합니다. 플러그인이나 애노테이션 처리기가 JavacTask에 이 리스너를 등록해 두고, 파싱·분석·생성 같은 각 단계의 시작과 끝을 감지해 부가 작업을 수행하는 패턴이 일반적입니다. 리스너 인터페이스답게 기본 구현이 비어 있어서, 시작과 종료 중 필요한 시점만 골라 구현하면 되는 점도 참 편리해요.

더 알아보기

Java 공식 API