2010-12-11 3 views
4

나는 AST Visitor (일식 JDT)를 프로그래밍하고있다.AST Visitor에서 방문하는 노드의 속성을 어떻게 알 수 있습니까?

EnumDeclaration 노드는 다음과 같은 구조적 특성을 포함

JAVADOC, MODIFIERS, NAME, SUPER_INTERFACE_TYPES, ENUM_CONSTANTSBODY_DECLARATIONS한다.

EnumDeclaration (예 : 노드 SimpleName)의 하위 노드를 방문하면 내가 방문한 노드 목록을 알 수 있습니까? 차별화가 가능합니까?

ENUM_CONSTANTS 또는 BODY_DECLARATIONS에서 찾은 노드에 따라 노드를 다르게 처리하고 싶습니다.

답변

2

에 나는 해결책을 찾아 냈다. 명시 적으로 목록의 노드를 방문하십시오 (accept()이 아니라 visit()이 아님). (슈퍼 인터페이스를 방문) 식으로 뭔가 : 사용하는 것이 불가능하다고

List<Type> superInterfaces = enumDecNode.superInterfaceTypes(); 
for(Type superInterface: superInterfaces) 
    superInterface.accept(this); 

참고 : Typevisit(Type node) 구현이 존재하지 않는위한 우산 추상 클래스입니다

this.visit(superInterface); 

때문이다.

이렇게하면 부모가 방문하는 즉시 superInterfaces 목록에있는 노드의 하위 항목도 강제로 방문하게됩니다. 문제 해결됨.

이 목록을 통해 노드의 모든 자식을 이미 처리 한 경우 방문자가 false를 반환하여 방문자를 다시 방문하지 못하게 할 수 있습니다.

1

노드는 해당 메소드를 호출해야합니다.

MODIFIERS -> visitModifiers 
NAME -> visitNAME 

그렇게

+0

그러나 이러한 방법은 바로, 나에 의해 프로그래밍 할 필요가? –

+0

@John Assymptoth, 방문자 패턴이어야합니다. EnumDeclaration 노드를 반복하는 방법을 보여줍니다. –

+0

감사합니다. 이제 네가 의미하는 바를 이해한다. 내 문제는 그 방법들을 프로그래밍하는데 있었다. –

0

또 다른 대체 솔루션 (마르쿠스 켈러 덕분에 @ JDT 포럼 일식) :

사용 "node.getLocationInParent() == EnumDeclaration.NAME_PROPERTY"또는 다른 * _PROPERTY 상수.

마르쿠스

관련 문제