class SETIfElseNode extends SETDagNode {
  private IterableSet ifBody, elseBody;

  public SETIfElseNode(AugmentedStmt characterizingStmt, IterableSet body, IterableSet ifBody, IterableSet elseBody) {
    super(characterizingStmt, body);

    this.ifBody = ifBody;
    this.elseBody = elseBody;

    add_SubBody(ifBody);
    add_SubBody(elseBody);
  }

  public IterableSet get_NaturalExits() {
    IterableSet c = new IterableSet();

    IterableSet ifChain = body2childChain.get(ifBody);
    if (!ifChain.isEmpty()) {
      c.addAll(((SETNode) ifChain.getLast()).get_NaturalExits());
    }

    IterableSet elseChain = body2childChain.get(elseBody);
    if (!elseChain.isEmpty()) {
      c.addAll(((SETNode) elseChain.getLast()).get_NaturalExits());
    }

    return c;
  }

  public ASTNode emit_AST() {<FILL_FUNCTION_BODY>}
}

    List<Object> astBody0 = emit_ASTBody(body2childChain.get(ifBody)),
        astBody1 = emit_ASTBody(body2childChain.get(elseBody));

    ConditionExpr ce = (ConditionExpr) ((IfStmt) get_CharacterizingStmt().get_Stmt()).getCondition();

    if (astBody0.isEmpty()) {
      List<Object> tbody = astBody0;
      astBody0 = astBody1;
      astBody1 = tbody;

      ce = ConditionFlipper.flip(ce);
    }

    if (astBody1.isEmpty()) {
      return new ASTIfNode(get_Label(), ce, astBody0);
    } else {
      return new ASTIfElseNode(get_Label(), ce, astBody0, astBody1);
    }
  
<methods>public void <init>(soot.dava.internal.asg.AugmentedStmt, IterableSet#RAW) ,public soot.dava.internal.asg.AugmentedStmt get_EntryStmt() <variables>