2010-12-11 11 views
4

私はAST Visitor(eclipse JDT)をプログラミングしています。AST訪問者は、どのノードのプロパティを訪問しているのかをどのように知ることができますか?

JAVADOCMODIFIERSNAMESUPER_INTERFACE_TYPESENUM_CONSTANTSBODY_DECLARATIONS

EnumDeclarationノードは、以下の構造特性を含んでいます。

EnumDeclarationの子ノード(たとえばノードSimpleName)にアクセスすると、私が訪れているノードのリストを知ることはできますか?差別化は可能ですか?

ENUM_CONSTANTSまたはBODY_DECLARATIONSのいずれかでノードを別の方法で処理したいとします。

答えて

2

MODIFIERS -> visitModifiers 
NAME -> visitNAME 

ので、私は解決策を見つけました。明示的にリスト内のノードにアクセスします(accept()ではなく、visit())。 (スーパーインタフェースを訪問して)ような何か:使用することはできませんことを

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

注:

this.visit(superInterface); 

Typeにはvisit(Type node)実装が存在しないために傘抽象クラスであるため。

これもsuperInterfaces、リスト内のノードの子供たちは、すぐに彼らの親が訪れているとして訪問することが強制されます。問題が解決しました。サイドノートでは

、あなたはすでにこれらのリストを介してノードのすべての子を処理した場合、あなたはfalseを返すことで、再訪問その子からの訪問者を禁止することができます。

1

ノードは対応するメソッドを呼び出す必要があります。

+0

しかし、これらの方法は右、私がプログラムすることがありますか? –

+0

@John Assymptothはビジターパターンである必要があります。 EnumDeclarationノードを反復処理する方法を示します。 –

+0

ありがとうございます。今あなたが何を意味するのか理解しています。私の問題は、それらのメソッドをプログラミングすることでした。 –

0

別の代替ソリューション(日食JDTフォーラム@マーカス・ケラーのおかげで):

使用 "node.getLocationInParent()== EnumDeclaration.NAME_PROPERTY" または その他* _property定数。

マルクス

関連する問題