@Override protected String convertExpression(Expression expression) { Object value = expression.resolveConstantExpressionValue(); return (value instanceof String) ? (String) value : null; }
private boolean isOneLiteral(Expression operand) { Object rightExpr = operand.resolveConstantExpressionValue(); return rightExpr instanceof Number && ((Number) rightExpr).longValue() == 1; }
private Integer intValue(Expression expr) { Object literal = expr.resolveConstantExpressionValue(); if (literal instanceof Number) { return ((Number) literal).intValue(); } return null; }
private Long asNumber(final Expression expr) { Long longValue = null; if (expr != null) { final Object val = expr.resolveConstantExpressionValue(); if (val instanceof Integer) { longValue = (long) ((Integer) val).intValue(); } else if (val instanceof Long) { longValue = (Long) val; } } return longValue; }
@Override protected String convertExpression(Expression expression) { Object value = expression.resolveConstantExpressionValue(); return (value instanceof Number) ? ((Number) value).toString() : null; }
@Override protected String convertExpression(Expression expression) { Object value = expression.resolveConstantExpressionValue(); return (value instanceof Boolean) ? ((Boolean) value).toString() : null; }
@Override protected String convertExpression(Expression expression) { Object value = expression.resolveConstantExpressionValue(); return (value instanceof Character) ? ((Character) value).toString() : null; }
private static boolean isZero(final Expression expr) { if (expr != null) { final Object val = expr.resolveConstantExpressionValue(); if (val instanceof Integer) { return ((Integer) val).intValue() == 0; } } return false; }
private int resolveIntValue(Object expression) { return ((Number) ((Expression) expression).resolveConstantExpressionValue()).intValue(); }
/** * Returns whether the provided expression represents a constant value. * * @param expr the expression to analyze * @return true the provided expression represents a constant value, false otherwise */ public static boolean isConstant(final Expression expr) { return (expr != null && expr.resolveConstantExpressionValue() != null) || isEnumConstant(expr); }
private boolean isEmptyString(final Expression expr) { return "".equals(expr.resolveConstantExpressionValue()) // Due to a bug with ASTNode.resolveConstantExpressionValue() // in Eclipse 3.7.2 and 3.8.0, this second check is necessary || (expr instanceof StringLiteral && "".equals(((StringLiteral) expr).getLiteralValue())); }
private boolean isVoid(final ArrayCreation node) { @SuppressWarnings("unchecked") final List<Expression> dimensions = (List<Expression>) node.dimensions(); for (final Expression dimension : dimensions) { final Object dimensionLiteral = dimension.resolveConstantExpressionValue(); if (!(dimensionLiteral instanceof Number) || ((Number) dimensionLiteral).longValue() != 0) { return false; } } return true; } }
private boolean is(final InfixExpression ie, MethodInvocation node, Operator operator, Integer constant) { final Expression leftOp = removeParentheses(ie.getLeftOperand()); final Expression rightOp = removeParentheses(ie.getRightOperand()); return hasOperator(ie, operator) && ((leftOp.equals(node) && constant.equals(rightOp.resolveConstantExpressionValue())) || (rightOp.equals(node) && constant.equals(leftOp.resolveConstantExpressionValue()))); }
private boolean isValidCapacityParameter(Expression sourceCollection, final List<Expression> args) { if (args.size() == 1 && isPrimitive(args.get(0), "int")) { final Object constant = args.get(0).resolveConstantExpressionValue(); final MethodInvocation mi = as(args.get(0), MethodInvocation.class); if (constant != null) { return constant.equals(0); } else { return isMethod(mi, "java.util.Collection", "size") && match(new ASTSemanticMatcher(), mi.getExpression(), sourceCollection); } } return false; } }
private boolean is(MethodInvocation node, String declaringTypeQualifiedName) { return isMethod(node, declaringTypeQualifiedName, "valueOf", "java.lang.String") || (isMethod(node, declaringTypeQualifiedName, "valueOf", "java.lang.String", "int") && equal(10, arguments(node).get(1).resolveConstantExpressionValue())); }
@Override public boolean visit(final WhileStatement node) { if (isPassive(node.getExpression()) && !Boolean.TRUE.equals(node.getExpression().resolveConstantExpressionValue())) { return maybeRemoveStmtWithEmptyBody(node, node.getBody()); } return VISIT_SUBTREE; }
@Override public boolean visit(final DoStatement node) { if (isPassive(node.getExpression()) && !Boolean.TRUE.equals(node.getExpression().resolveConstantExpressionValue())) { return maybeRemoveStmtWithEmptyBody(node, node.getBody()); } return VISIT_SUBTREE; }
/** @see JLS, section 5.2 Assignment Conversion */ private boolean isConstantExpressionAssignmentConversion(CastExpression node) { final Object value = node.getExpression().resolveConstantExpressionValue(); if (value instanceof Integer) { final int val = (Integer) value; return (hasType(node, "byte") && Byte.MIN_VALUE <= val && val <= Byte.MAX_VALUE) || (hasType(node, "short") && Short.MIN_VALUE <= val && val <= Short.MAX_VALUE) || (hasType(node, "char") && 0 <= val && val <= 65535); } return false; }
@Override public boolean visit(final ForStatement node) { if (node.getExpression() != null && !Boolean.TRUE.equals(node.getExpression().resolveConstantExpressionValue()) && arePassive(node.initializers()) && isPassive(node.getExpression())) { return maybeRemoveStmtWithEmptyBody(node, node.getBody()); } return VISIT_SUBTREE; }
@Override public boolean visit(WhileStatement node) { final Object constantCondition = node.getExpression().resolveConstantExpressionValue(); if (Boolean.TRUE.equals(constantCondition)) { ASTBuilder b = this.ctx.getASTBuilder(); this.ctx.getRefactorings().replace(node, b.doWhile(b.copy(node.getExpression()), b.copy(node.getBody()))); return DO_NOT_VISIT_SUBTREE; } return VISIT_SUBTREE; } }