Children of org.eclipse.jdt.core.dom.ASTNode

后端 未结 2 1872
北荒
北荒 2021-01-03 02:43

Using Eclise JDT, I need to retrieve the children of any ASTNode. Is there a utility method somewhere that I could use ?

The only way I can think of right now is to

相关标签:
2条回答
  • 2021-01-03 03:07

    I would start by looking at source of ASTView Plugin, since that also does the same thing.

    Based on the code in

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

    the required code should look something like this

    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];
        }
    }
    
    0 讨论(0)
  • 2021-01-03 03:07

    We can retrieve the children as an ASTNode List using the API of :

    ASTNode.getStructureProperty(StructuralPropertyDescriptor property)
    

    It returns the value of the given structural property for this node. The value returned depends on the kind of 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)
    

    However, the ChildListPropertyDescripor is not intended to be instantiated by clients. You can refer to my code to get the list of children:

    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;
    }
    
    0 讨论(0)
提交回复
热议问题