class ASTNode extends AbstractUnit {
  public static final String TAB = "    ", NEWLINE = "\n";

  protected List<Object> subBodies;

  public ASTNode() {
    subBodies = new ArrayList<Object>();
  }

  public abstract void toString(UnitPrinter up);

  protected void body_toString(UnitPrinter up, List<Object> body) {
    Iterator<Object> it = body.iterator();
    while (it.hasNext()) {
      ((ASTNode) it.next()).toString(up);

      if (it.hasNext()) {
        up.newline();
      }
    }
  }

  protected String body_toString(List<Object> body) {
    StringBuffer b = new StringBuffer();

    Iterator<Object> it = body.iterator();
    while (it.hasNext()) {
      b.append(((ASTNode) it.next()).toString());

      if (it.hasNext()) {
        b.append(NEWLINE);
      }
    }

    return b.toString();
  }

  public List<Object> get_SubBodies() {
    return subBodies;
  }

  public abstract void perform_Analysis(ASTAnalysis a);

  protected void perform_AnalysisOnSubBodies(ASTAnalysis a) {<FILL_FUNCTION_BODY>}

  public boolean fallsThrough() {
    return false;
  }

  public boolean branches() {
    return false;
  }

  /*
   * Nomair A. Naeem, 7-FEB-05 Part of Visitor Design Implementation for AST See: soot.dava.toolkits.base.AST.analysis For
   * details
   */
  public void apply(Analysis a) {
    throw new RuntimeException("Analysis invoked apply method on ASTNode");
  }

}

    Iterator<Object> sbit = subBodies.iterator();
    while (sbit.hasNext()) {
      Object subBody = sbit.next();
      Iterator it = null;

      if (this instanceof ASTTryNode) {
        it = ((List) ((ASTTryNode.container) subBody).o).iterator();
      } else {
        it = ((List) subBody).iterator();
      }

      while (it.hasNext()) {
        ((ASTNode) it.next()).perform_Analysis(a);
      }
    }

    a.analyseASTNode(this);
  
<methods>public non-sealed void <init>() ,public void addBoxPointingToThis(soot.UnitBox) ,public void apply(soot.util.Switch) ,public void clearUnitBoxes() ,public abstract java.lang.Object clone() ,public List<soot.UnitBox> getBoxesPointingToThis() ,public List<soot.ValueBox> getDefBoxes() ,public List<soot.UnitBox> getUnitBoxes() ,public List<soot.ValueBox> getUseAndDefBoxes() ,public List<soot.ValueBox> getUseBoxes() ,public void redirectJumpsToThisTo(soot.Unit) ,public void removeBoxPointingToThis(soot.UnitBox) <variables>protected List<soot.UnitBox> boxesPointingToThis