@Override
 public void endVisit(IfStatement node) {
   Expression expr = node.getExpression();
   Boolean value = getKnownValue(expr);
   if (value != null) {
     Statement sideEffects = getSideEffects(expr);
     if (sideEffects != null) {
       TreeUtil.insertBefore(node, sideEffects);
     }
     if (value) {
       node.replaceWith(TreeUtil.remove(node.getThenStatement()));
     } else if (node.getElseStatement() != null) {
       node.replaceWith(TreeUtil.remove(node.getElseStatement()));
     } else {
       node.remove();
     }
   }
 }
 @Override
 public boolean visit(IfStatement node) {
   visitAndExtract(node.getExpression(), node);
   node.getThenStatement().accept(this);
   Statement elseStmt = node.getElseStatement();
   if (elseStmt != null) {
     elseStmt.accept(this);
   }
   return false;
 }