ElementKindVisitor6 — 요소 종류에 따른 방문자
ElementKindVisitor6 — 요소 종류에 따른 방문자 (RELEASE_6)
어노테이션 프로세서에서 프로그램 요소(클래스, 메서드, 필드 등)를 순회할 때, 요소의 종류(kind) 에 따라 다른 처리를 하고 싶을 때가 있어요. ElementKindVisitor6은 요소의 종류에 기반한 방문 동작을 기본으로 제공하는 클래스예요. RELEASE_6 소스 버전에 맞는 기본 동작을 갖추고 있어요.
여러 종류가 될 수 있는 요소 Xyz(예: 클래스라면 CLASS, INTERFACE, ENUM 등)의 visitXyz 메서드는, 인자로 들어온 요소의 실제 종류에 해당하는 visitXyzAsKind 메서드로 위임해요. 그리고 visitXyzAsKind 메서드는 받은 인자를 그대로 defaultAction에게 넘겨주죠.
본문
클래스 선언은 다음과 같아요.
public class ElementKindVisitor6<R,P>
extends SimpleElementVisitor6<R,P>
방문자답게 R(반환 타입)과 P(추가 파라미터 타입) 두 개의 타입 파라미터를 받아요.
이 클래스는 RELEASE_6 및 그 이전의 언어 구조를 다루는 방문 메서드를 구현해요. 자바 6 시절에 존재하던 요소 종류를 기준으로 동작한다는 뜻이에요. 때문에 자바 7 이상에서 추가된 요소 종류(예: MODULE 등)를 만나면 기본적으로 다른 처리로 빠질 수 있어요.
각 요소 종류에 대해 다음과 같은 방문 메서드들을 제공해요.
visitTypeAsClass(...),visitTypeAsInterface(...),visitTypeAsEnum(...),visitTypeAsAnnotationType(...)— 타입 요소가 어떤 종류인지에 따라 분기.visitVariableAsField(...),visitVariableAsParameter(...),visitVariableAsLocalVariable(...),visitVariableAsExceptionParameter(...)— 변수 요소의 종류별 분기.visitExecutableAsMethod(...),visitExecutableAsConstructor(...)— 메서드/생성자 분기.
기본적으로 이 메서드들은 defaultAction을 호출하며, defaultAction도 visitUnknown으로 빠지지 않고 기본 처리를 제공해요. 그래서 이 클래스를 상속받아 관심 있는 요소 종류에 대한 처리만 오버라이드하면 돼요.
javax.lang.model.util 패키지에 속하며, 소스 버전이 올라감에 따라 ElementKindVisitor7/8/9/14가 같은 이름 시리즈로 존재해요. 기준 버전만 다를 뿐 사용 방식은 동일해요.