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
I would start by looking at source of ASTView Plugin, since that also does the same thing.
Based on the code in
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];
}
}
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;
}