/**
  * Duplicate a tree, assuming this is a root node of a tree-- duplicate that node and what's
  * below; ignore siblings of root node.
  */
 public static GrammarAST dupTreeNoActions(GrammarAST t, GrammarAST parent) {
   if (t == null) {
     return null;
   }
   GrammarAST result = (GrammarAST) t.dupNode();
   for (GrammarAST subchild : getChildrenForDupTree(t)) {
     result.addChild(dupTreeNoActions(subchild, result));
   }
   return result;
 }
 public static GrammarAST dupTree(GrammarAST t) {
   if (t == null) {
     return null;
   }
   GrammarAST root = dup(t); // make copy of root
   // copy all children of root.
   for (int i = 0; i < t.getChildCount(); i++) {
     GrammarAST child = (GrammarAST) t.getChild(i);
     root.addChild(dupTree(child));
   }
   return root;
 }