4

私はASTビジター(Eclipse JDT)をプログラミングしています。

EnumDeclarationノードには、次の構造プロパティが含まれています。

JAVADOC、、、、、および。MODIFIERS_ NAME_ SUPER_INTERFACE_TYPES_ENUM_CONSTANTSBODY_DECLARATIONS

の子ノードEnumDeclarationSimpleNameたとえば、ノード)にアクセスすると、アクセスしているノードのリストのどれを知ることができますか?区別することは可能ですか?

ENUM_CONSTANTSで見つけたか、で見つけたかによって、ノードの処理方法を変えたいのですがBODY_DECLARATIONS

4

3 に答える 3

2

私は解決策を見つけました。リスト内のノードに明示的にアクセスします(accept()ではなく、visit())。(スーパーインターフェイスにアクセスするための)次のようなもの:

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

以下を使用することはできないことに注意してください。

    this.visit( superInterface);

は、実装が存在Typeしない包括的な抽象クラスだからです。visit( Type node)

これにより、リスト内のノードの子は、superInterfaces親が訪問されるとすぐに訪問されるようになります。問題が解決しました。

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

于 2010-12-11T20:40:24.667 に答える
1

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

MODIFIERS -> visitModifiers 
NAME -> visitNAME

等々

于 2010-12-11T19:33:34.107 に答える
0

別の代替ソリューション(Markus Keller @ eclipse JDTフォーラムに感謝):

「node.getLocationInParent()==EnumDeclaration.NAME_PROPERTY」またはその他の*_PROPERTY定数を使用します。

マーカス

于 2010-12-13T10:27:50.363 に答える