DiagnosticListener — 도구의 진단을 받아보는 리스너 인터페이스

DiagnosticListener — 도구의 진단을 받아보는 리스너 인터페이스

컴파일러 같은 도구가 진단 메시지를 낼 때 그걸 통지받고 싶다면, DiagnosticListener를 구현해 도구에 넘겨주면 돼요. 이 인터페이스는 도구로부터 진단을 수신하는 리스너예요. 하나의 메서드 report만 정의하는 단순한 함수형 인터페이스예요.

프로그램 안에서 컴파일러를 구동할 때, 진단 처리 방식을 직접 제어하고 싶다면 이 리스너를 쓰면 돼요.

출처: Java API Reference

본문

DiagnosticListener는 제네릭 인터페이스로, 타입 파라미터 S는 진단 소스의 타입이에요.

public interface DiagnosticListener<S>

정의된 메서드는 하나예요.

void report(Diagnostic<? extends S> diagnostic)

이 메서드는 도구가 진단(오류·경고·노트 등)을 보고할 때 호출돼요. 생성된 Diagnostic 객체를 인자로 받아 원하는 처리를 하면 돼요. 한 가지 유의할 점은, report가 동시에(concurrently) 호출될 수 있으므로 구현은 스레드 안전하게 작성하는 것이 좋아요.

DiagnosticCollector는 이 인터페이스의 대표적인 구현으로, report로 받은 진단을 리스트에 모아요. 람다를 써서 간단히 진단을 바로 출력하는 것도 가능해요.

DiagnosticListener<JavaFileObject> listener = d -> System.out.println(d.getMessage(null));

이 인터페이스는 javax.tools 패키지에 속해요.

더 알아보기 (Learn more)