6

Eclise JDTを使用して、ASTNodeの子を取得する必要があります。どこかに使えるユーティリティメソッドはありますか?

私が今考えることができる唯一の方法は、ASTVisitorをサブクラス化し、各種類のノードを手動で処理してその子を見つけることです。しかし、すべてのノードタイプを調査するのは大変な作業です。

4

2 に答える 2

5

ASTViewプラグインのソースを調べることから始めます。これも同じことを行うからです。

のコードに基づく

  • org.eclipse.jdt.astview.views.ASTViewContentProvider.getNodeChildren(ASTNode)
  • org.eclipse.jdt.astview.views.NodeProperty.getChildren()

必要なコードは次のようになります

public Object[] getChildren(ASTNode node) {
    List list= node.structuralPropertiesForType();
    for (int i= 0; i < list.size(); i++) {
        StructuralPropertyDescriptor curr= (StructuralPropertyDescriptor) list.get(i);
            Object child= node.getStructuralProperty(curr);
        if (child instanceof List) {
                return ((List) child).toArray();
        } else if (child instanceof ASTNode) {
            return new Object[] { child };
            }
        return new Object[0];
    }
}
于 2012-08-07T20:05:00.453 に答える
1

次のAPIを使用して、子をASTNodeリストとして取得できます。

ASTNode.getStructureProperty(StructuralPropertyDescriptor property)

このノードの指定された構造プロパティの値を返します。返される値は、プロパティの種類によって異なります。

SimplePropertyDescriptor - the value of the given simple property, or null if none; primitive values are "boxed"
ChildPropertyDescriptor - the child node (type ASTNode), or null if none
ChildListPropertyDescriptor - the list (element type: ASTNode)

ただし、ChildListPropertyDescriporはクライアントによってインスタンス化されることを意図したものではありません。私のコードを参照して、子のリストを取得できます。

public static List<ASTNode> getChildren(ASTNode node) {
    List<ASTNode> children = new ArrayList<ASTNode>();
    List list = node.structuralPropertiesForType();
    for (int i = 0; i < list.size(); i++) {
        Object child = node.getStructuralProperty((StructuralPropertyDescriptor)list.get(i));
        if (child instanceof ASTNode) {
            children.add((ASTNode) child);
        }
    }
    return children;
}
于 2016-06-30T12:23:13.167 に答える