Diagnostic — 컴파일러·도구가 내는 진단 메시지 인터페이스

Diagnostic — 컴파일러·도구가 내는 진단 메시지 인터페이스

컴파일러나 문서 도구가 컴파일 중 오류·경고·노트 같은 메시지를 낼 때, 그 메시지를 추상화한 것이 Diagnostic 인터페이스예요. 도구의 진단(diagnostic)은 보통 소스 파일의 특정 위치에서 발생한 문제를 보고하지만, 항상 위치나 파일과 연결되지는 않아요.

진단에는 종류(kind)와 출처 소스, 그리고 파일 내 위치(시작·끝·줄·컬럼) 같은 세부 정보가 담겨요.

출처: Java API Reference

본문

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

public interface Diagnostic<S>

주요 상수와 메서드는 다음과 같아요.

static final long NOPOS
Diagnostic.Kind getKind()
S getSource()
long getPosition()
long getStartPosition()
long getEndPosition()
long getLineNumber()
long getColumnNumber()
  • getKind() — 진단의 종류(ERROR, WARNING, NOTE 등)를 돌려줘요.
  • getSource() — 진단이 발생한 소스 객체를 돌려줘요.
  • getPosition() — 파일 시작부터의 제로 기반(0-based) 문자 오프셋 위치를 돌려줘요.
  • getLineNumber()/getColumnNumber() — 1부터 시작하는 줄·컬럼 번호를 돌려줘요.

위치 규칙에 유의할 게 있어요. 위치는 파일 시작부터 제로 기반 문자 오프셋이에요. NOPOS(-1)를 제외한 음수 값은 유효한 위치가 아니에요. 줄·컬럼 번호는 1부터 시작하며, NOPOS를 제외한 음수와 0은 유효하지 않아요.

Diagnostic.Kind는 중첩 enum으로 ERROR, WARNING, MANDATORY_WARNING, NOTE, OTHER 같은 종류를 정의해요. 이 인터페이스는 javax.tools 패키지에 속하며, DiagnosticCollectorDiagnosticListener와 함께 사용돼요.

더 알아보기 (Learn more)