TreePathScanner
TreePathScanner (소스 트리 경로 추적 스캐너)
모든 자식 트리 노드를 방문하면서 부모 노드들의 경로를 계속 유지해 주는 TreeVisitor 구현 클래스입니다. 소스 트리를 순회할 때 현재 노드의 경로 정보가 항상 필요하다면 이 클래스를 상속받아 사용합니다.
본문
TreeScanner를 상속받아 동작하며, 기본 순회 기능에 '현재 경로 추적' 능력을 더한 형태예요. 특정 타입의 노드를 방문하고 싶으면 visitXYZ 메서드를 오버라이드하고, 그 안에서 super.visitXYZ를 호출하면 하위 노드들까지 이어서 방문합니다.
스캔이 진행되는 동안 스캐너는 지금 어느 노드를 보고 있는지 경로(TreePath)를 계속 갱신해 주기 때문에, 중첩 구조 안에서 현재 위치가 어디인지 항상 알 수 있어요. 소스 트리를 탐색하면서 부모-자식 관계가 필요할 때 특히 유용합니다.
주의할 점이 하나 있어요. '현재 경로'를 초기화하려면 스캔을 scan 메서드 중 하나로 시작해야 합니다. 제네릭 R은 반환 타입, P는 추가 매개변수 타입이고 필요 없으면 Void를 쓰면 돼요.
생성자
TreePathScanner()— 빈 경로 추적 스캐너를 생성합니다.
주요 메서드
-
scan(TreePath path, P p)— 트리 경로로 식별되는 위치에서부터 트리를 스캔해요. -
scan(Tree tree, P p)— 단일 노드를 스캔하며, 스캔이 진행되는 동안 현재 경로가 갱신됩니다. 보통 진행 중인 스캔의 방문 메서드 안에서 호출되며, 예외적으로CompilationUnitTree전체 스캔을 시작할 때도 사용할 수 있어요. -
getCurrentPath()— 현재 활성화된scan호출들에 의해 만들어진 노드의 현재 경로를 반환합니다.