DiagnosticCollector — 진단을 리스트로 모아주는 수집기

DiagnosticCollector — 진단을 리스트로 모아주는 수집기

컴파일 과정에서 발생하는 진단 메시지를 여럿 모아서 나중에 확인하고 싶을 때가 있어요. DiagnosticCollector는 그런 진단들을 리스트에 쉽게 모아주는 수집기 클래스예요. DiagnosticListener의 구현으로, 보고된 진단을 모두 내부 리스트에 저장해요.

컴파일을 실행한 뒤 수집된 진단 목록을 꺼내 확인하는 용도로 아주 흔히 쓰여요.

출처: Java API Reference

본문

클래스 선언은 다음과 같아요.

public class DiagnosticCollector<S>
extends Object
implements DiagnosticListener<S>

s는 진단 소스의 타입 파라미터예요. 주요 생성자와 메서드는 다음과 같아요.

public DiagnosticCollector()
public void report(Diagnostic<? extends S> diagnostic)
public List<Diagnostic<? extends S>> getDiagnostics()
  • report(...)DiagnosticListener의 메서드로, 진단이 발생할 때마다 호출돼 내부 리스트에 추가해요.
  • getDiagnostics() — 지금까지 수집된 진단 목록을 돌려줘요.

전형적인 사용 패턴은 이래요. 컴파일러를 준비하면서 DiagnosticCollectorDiagnosticListener로 넘기고, 컴파일이 끝난 뒤 getDiagnostics()로 진단 목록을 순회하며 오류를 처리해요.

DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
// 컴파일러/파일 매니저 생성 시 diagnostics를 넘긴다
for (Diagnostic<? extends JavaFileObject> d : diagnostics.getDiagnostics()) {
    System.out.println(d.getKind() + ": " + d.getMessage(null));
}

이 클래스는 javax.tools 패키지에 속하며, 프로그램 안에서 컴파일러를 직접 구동할 때 진단을 확인하는 가장 간단한 수단이에요.

더 알아보기 (Learn more)