ElementKindVisitor6 — 요소 종류에 따른 방문자

ElementKindVisitor6 — 요소 종류에 따른 방문자 (RELEASE_6)

어노테이션 프로세서에서 프로그램 요소(클래스, 메서드, 필드 등)를 순회할 때, 요소의 종류(kind) 에 따라 다른 처리를 하고 싶을 때가 있어요. ElementKindVisitor6은 요소의 종류에 기반한 방문 동작을 기본으로 제공하는 클래스예요. RELEASE_6 소스 버전에 맞는 기본 동작을 갖추고 있어요.

여러 종류가 될 수 있는 요소 Xyz(예: 클래스라면 CLASS, INTERFACE, ENUM 등)의 visitXyz 메서드는, 인자로 들어온 요소의 실제 종류에 해당하는 visitXyzAsKind 메서드로 위임해요. 그리고 visitXyzAsKind 메서드는 받은 인자를 그대로 defaultAction에게 넘겨주죠.

출처: Java API Reference

본문

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

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을 호출하며, defaultActionvisitUnknown으로 빠지지 않고 기본 처리를 제공해요. 그래서 이 클래스를 상속받아 관심 있는 요소 종류에 대한 처리만 오버라이드하면 돼요.

javax.lang.model.util 패키지에 속하며, 소스 버전이 올라감에 따라 ElementKindVisitor7/8/9/14가 같은 이름 시리즈로 존재해요. 기준 버전만 다를 뿐 사용 방식은 동일해요.

더 알아보기 (Learn more)