Diagnostic — 컴파일러·도구가 내는 진단 메시지 인터페이스
Diagnostic — 컴파일러·도구가 내는 진단 메시지 인터페이스
컴파일러나 문서 도구가 컴파일 중 오류·경고·노트 같은 메시지를 낼 때, 그 메시지를 추상화한 것이 Diagnostic 인터페이스예요. 도구의 진단(diagnostic)은 보통 소스 파일의 특정 위치에서 발생한 문제를 보고하지만, 항상 위치나 파일과 연결되지는 않아요.
진단에는 종류(kind)와 출처 소스, 그리고 파일 내 위치(시작·끝·줄·컬럼) 같은 세부 정보가 담겨요.
본문
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 패키지에 속하며, DiagnosticCollector나 DiagnosticListener와 함께 사용돼요.