DocTreeScanner
DocTreeScanner (문서 주석 트리 순회 방문자)
문서 주석 트리의 모든 자식 노드를 방문하는 DocTreeVisitor 구현 클래스입니다. 특정 종류의 DocTree 노드를 순회하면서 처리하고 싶을 때 이 클래스를 상속받아 필요한 visitXXX 메서드만 오버라이드하면 돼요.
본문
DocTreeVisitor<R,P>를 구현하는 기본 제공 방문자로, 문서 주석을 구성하는 모든 종류의 노드에 대한 visitXXX 메서드를 갖추고 있습니다. 특정 타입의 노드를 방문하고 싶으면 해당 메서드를 오버라이드하고, 그 안에서 super.visitXXX를 호출하면 자식 노드들까지 이어서 방문합니다.
제네릭 매개변수 R은 방문자 메서드의 반환 타입, P는 추가로 전달할 매개변수 타입입니다. 결과가 필요 없으면 Void를 쓰면 돼요.
기본 구현의 결과 결정 규칙이 있어요. 자식이 없는 노드는 null, 자식이 하나면 그 자식을 scan한 결과, 자식이 여럿이면 각 자식을 차례로 scan한 뒤 reduce(R, R)로 누적 결합합니다. reduce의 기본 동작은 마지막으로 스캔한 자식의 결과를 반환하는 방식이라, 일반적으로 visitXYZ의 결과는 마지막 자식의 결과가 됩니다.
예를 들어 트리 안의 오류 노드 개수를 세는 방문자는 이렇게 만들 수 있어요.
class CountErrors extends DocTreeScanner<Integer,Void> {
@Override
public Integer visitErroneous(ErroneousTree node, Void p) {
return 1;
}
@Override
public Integer reduce(Integer r1, Integer r2) {
return (r1 == null ? 0 : r1) + (r2 == null ? 0 : r2);
}
}
주요 메서드
-
scan(DocTree node, P p)— 단일 노드를 스캔해 방문자 메서드의 결과를 반환해요. -
scan(Iterable<? extends DocTree> nodes, P p)— 노드들의 연속을 스캔하고, 각 방문 결과를reduce로 결합한 값을 반환합니다. -
reduce(R r1, R r2)— 두 결과를 하나로 결합합니다. 기본 구현은 첫 번째 인자를 그대로 반환해요. -
visitXXX(DocTree node, P p)— 각 노드 타입별 방문 메서드입니다.visitAttribute,visitAuthor,visitComment,visitDocComment,visitLink,visitParam,visitReturn,visitSee,visitThrows,visitText등 문서 주석의 거의 모든 노드 종류에 대응하는 메서드가 준비되어 있어요. -
visitOther(DocTree node, P p)— 알 수 없는 종류의 노드를 방문합니다. 문서 주석 태그 집합이 진화하면서DocTree계층에 새 노드 종류가 추가될 때 발생할 수 있어요.
자식이 없는 잎 노드 계열(visitComment, visitDocRoot, visitEntity, visitErroneous, visitText 등)은 기본 구현이 null을 반환합니다.