DFSSkip.java
package edu.udel.cis.vsl.abc.ast.util;
import edu.udel.cis.vsl.abc.ast.node.IF.ASTNode;
public class DFSSkip {
/**
* Returns the next node (in DFS order) by skipping the whole sub-tree of
* the given node.
*
* @param node
* @return
*/
static public ASTNode nextDFSSkip(ASTNode node) {
ASTNode parent = node.parent();
int childIdx = node.childIndex();
if (parent == null)
return null;
if (parent.numChildren() == childIdx + 1)
return nextDFSSkip(parent);
ASTNode result = null;
childIdx = childIdx + 1;
while (result == null && childIdx < parent.numChildren())
result = parent.child(childIdx++);
if (result == null)
return nextDFSSkip(parent);
return result;
}
}