@Override
 public void caseAIfStmt(AIfStmt node) {
   inAIfStmt(node);
   if (node.getN2() != null) {
     node.getN2().apply(this);
   }
   if (node.getI2() != null) {
     node.getI2().apply(this);
   }
   if (node.getEnd() != null) {
     node.getEnd().apply(this);
   }
   if (node.getOptElse() != null) {
     node.getOptElse().apply(this);
   }
   {
     List<PStmt> copy = new ArrayList<PStmt>(node.getStmt());
     Collections.reverse(copy);
     for (PStmt e : copy) {
       e.apply(this);
     }
   }
   if (node.getN1() != null) {
     node.getN1().apply(this);
   }
   if (node.getThen() != null) {
     node.getThen().apply(this);
   }
   if (node.getExpr() != null) {
     node.getExpr().apply(this);
   }
   if (node.getI1() != null) {
     node.getI1().apply(this);
   }
   outAIfStmt(node);
 }