ElementScanner6 — 요소를 재귀적으로 탐색하는 방문자
ElementScanner6 — 요소를 재귀적으로 탐색하는 방문자 (RELEASE_6)
요소를 순회할 때, 해당 요소에 포함된 하위 요소(예: 클래스 안의 메서드·필드)까지 함께 탐색하고 싶은 경우가 있어요. ElementScanner6은 요소를 순회하면서 포함된 하위 요소까지 재귀적으로 스캔하는 방문자 클래스예요. RELEASE_6 소스 버전에 맞는 기본 동작을 갖추고 있어요.
visitXyz 메서드들은 해당 메서드의 명세에 따라 enclosed elements, parameters 등의 구성 요소를 scan으로 호출하면서 훑어내려가요. 하위 클래스에서 visitXyz를 오버라이드하면 요소를 방문하는 순서를 제어할 수도 있어요.
본문
클래스 선언은 다음과 같아요.
public class ElementScanner6<R,P>
extends Object
implements ElementVisitor<R,P>
R은 방문·스캔 결과의 반환 타입, P는 추가 파라미터 타입이에요.
이 클래스의 핵심은 스캔(scan) 동작이에요. scan 메서드는 요소를 방문하고, 그 요소가 감싸고 있는 하위 요소들을 다시 방문해서 결과를 누적해요. 이런 식으로 트리 구조를 통째로 훑을 수 있게 되죠.
주요 개념:
scan(Element e, P p)— 요소e를 방문하고 그 하위 요소들을 재귀적으로 스캔해요.scan(Iterable<? extends Element> iterable, P p)— 여러 요소를 순회하며 각각 스캔해요.- 기본 결과를 누적하는 방식은 구현에 따라 다르며,
visitXyz메서드를 오버라이드해서 방문 순서나 누적 방식을 바꿀 수 있어요.
RELEASE_6 기준 동작이라 자바 7 이후에 추가된 요소 종류를 만나면 기본적으로 다른 처리로 빠질 수 있어요. 그래서 최신 자바 버전을 대상으로 한다면 ElementScanner7/8/9/14처럼 소스 버전이 올라간 시리즈를 쓰는 게 좋아요. javax.lang.model.util 패키지에 속해요.