@Override public boolean visit(WhileStatement node) { final Object constantCondition = node.getExpression().resolveConstantExpressionValue(); if (Boolean.FALSE.equals(constantCondition)) { this.ctx.getRefactorings().remove(node); return DO_NOT_VISIT_SUBTREE; } return VISIT_SUBTREE; }
@Override public boolean visit(IfStatement node) { final ASTBuilder b = this.ctx.getASTBuilder(); final Refactorings r = this.ctx.getRefactorings(); final Statement thenStmt = node.getThenStatement(); final Statement elseStmt = node.getElseStatement(); final Expression condition = node.getExpression(); if (elseStmt != null && asList(elseStmt).isEmpty()) { r.remove(elseStmt); return DO_NOT_VISIT_SUBTREE; } else if (thenStmt != null && asList(thenStmt).isEmpty()) { if (elseStmt != null) { r.replace(node, b.if0(b.negate(condition), b.move(elseStmt))); } else { final List<Expression> sideEffectExprs = new ArrayList<Expression>(); collectSideEffects(condition, sideEffectExprs); if (!sideEffectExprs.isEmpty()) { for (Expression sideEffectExpr : sideEffectExprs) { r.insertBefore(b.toStmt(b.move(sideEffectExpr)), node); } } r.remove(node); } return DO_NOT_VISIT_SUBTREE; } final Object constantCondition = condition.resolveConstantExpressionValue(); if (Boolean.TRUE.equals(constantCondition)) { r.replace(node, b.copy(thenStmt)); if (lastStmtIsThrowOrReturn(thenStmt)) { r.remove(getNextSiblings(node)); } return DO_NOT_VISIT_SUBTREE; } else if (Boolean.FALSE.equals(constantCondition)) { if (elseStmt != null) { r.replace(node, b.copy(elseStmt)); if (lastStmtIsThrowOrReturn(elseStmt)) { r.remove(getNextSiblings(node)); } } else { r.remove(node); } return DO_NOT_VISIT_SUBTREE; } return VISIT_SUBTREE; }