Search in sources :

Example 6 with PrefixExpression

use of org.eclipse.jdt.core.dom.PrefixExpression in project AutoRefactor by JnRouvignac.

the class TernaryOperatorRatherThanDuplicateConditionsRefactoring method getBasisExpression.

private Expression getBasisExpression(final Expression originalExpr, final AtomicBoolean isExprPositive) {
    Expression basisExpr = null;
    final PrefixExpression negateExpr = as(originalExpr, PrefixExpression.class);
    if (hasOperator(negateExpr, NOT)) {
        basisExpr = negateExpr.getOperand();
        isExprPositive.set(false);
    } else {
        basisExpr = originalExpr;
        isExprPositive.set(true);
    }
    return basisExpr;
}
Also used : InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) Expression(org.eclipse.jdt.core.dom.Expression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression)

Example 7 with PrefixExpression

use of org.eclipse.jdt.core.dom.PrefixExpression in project AutoRefactor by JnRouvignac.

the class SimplifyExpressionRefactoring method getExpressionWithoutParentheses.

private Expression getExpressionWithoutParentheses(ParenthesizedExpression node) {
    final ASTNode parent = node.getParent();
    final Expression innerExpr = node.getExpression();
    if (innerExpr instanceof ParenthesizedExpression) {
        return innerExpr;
    }
    if (parent instanceof InfixExpression) {
        final InfixExpression parentInfixExpr = (InfixExpression) parent;
        if (innerExpr instanceof InfixExpression) {
            final Operator innerOp = ((InfixExpression) innerExpr).getOperator();
            if (innerOp == parentInfixExpr.getOperator() && OperatorEnum.isAssociative(innerOp) && // to other if statements in this method.
            equalNotNull(innerExpr.resolveTypeBinding(), parentInfixExpr.resolveTypeBinding())) {
                return innerExpr;
            }
        }
    }
    // Infix, prefix or postfix without parenthesis is not readable
    if ((parent instanceof InfixExpression && (InfixExpression.Operator.PLUS.equals(((InfixExpression) parent).getOperator()) || InfixExpression.Operator.MINUS.equals(((InfixExpression) parent).getOperator()))) || (parent instanceof PrefixExpression && (PLUS.equals(((PrefixExpression) parent).getOperator()) || MINUS.equals(((PrefixExpression) parent).getOperator())))) {
        if (innerExpr instanceof PrefixExpression && (DECREMENT.equals(((PrefixExpression) innerExpr).getOperator()) || INCREMENT.equals(((PrefixExpression) innerExpr).getOperator()) || PLUS.equals(((PrefixExpression) innerExpr).getOperator()) || MINUS.equals(((PrefixExpression) innerExpr).getOperator()))) {
            return node;
        }
        if (innerExpr instanceof PostfixExpression && (PostfixExpression.Operator.DECREMENT.equals(((PostfixExpression) innerExpr).getOperator()) || PostfixExpression.Operator.INCREMENT.equals(((PostfixExpression) innerExpr).getOperator()))) {
            return node;
        }
    }
    if (isInnerExprHardToRead(innerExpr, parent)) {
        // return (bla != null) ? bla.getSomething() : null;
        return node;
    }
    if (isUselessParenthesesInStatement(parent, node)) {
        return innerExpr;
    }
    final int compareTo = OperatorEnum.compareTo(innerExpr, parent);
    if (compareTo < 0) {
        return node;
    } else if (compareTo > 0) {
        return innerExpr;
    }
    if (// some like it like that
    innerExpr instanceof InfixExpression || // or if it can be removed.
    innerExpr instanceof CastExpression || // infix and prefix or postfix without parenthesis is not readable
    ((parent instanceof InfixExpression || parent instanceof PrefixExpression || parent instanceof PostfixExpression) && (innerExpr instanceof PrefixExpression || innerExpr instanceof PostfixExpression))) {
        return node;
    }
    return innerExpr;
}
Also used : ParenthesizedExpression(org.eclipse.jdt.core.dom.ParenthesizedExpression) Operator(org.eclipse.jdt.core.dom.InfixExpression.Operator) PostfixExpression(org.eclipse.jdt.core.dom.PostfixExpression) ConditionalExpression(org.eclipse.jdt.core.dom.ConditionalExpression) InstanceofExpression(org.eclipse.jdt.core.dom.InstanceofExpression) Expression(org.eclipse.jdt.core.dom.Expression) ParenthesizedExpression(org.eclipse.jdt.core.dom.ParenthesizedExpression) InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) CastExpression(org.eclipse.jdt.core.dom.CastExpression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) ASTNode(org.eclipse.jdt.core.dom.ASTNode) InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) PostfixExpression(org.eclipse.jdt.core.dom.PostfixExpression) CastExpression(org.eclipse.jdt.core.dom.CastExpression)

Example 8 with PrefixExpression

use of org.eclipse.jdt.core.dom.PrefixExpression in project AutoRefactor by JnRouvignac.

the class SimplifyExpressionRefactoring method maybeReduceBooleanExpression.

private boolean maybeReduceBooleanExpression(final InfixExpression node, final Expression leftExpr, final Expression rightExpr) {
    final Boolean leftBoolean = getBooleanLiteral(leftExpr);
    final Boolean rightBoolean = getBooleanLiteral(rightExpr);
    if (leftBoolean != null) {
        return replace(node, leftBoolean.booleanValue(), rightExpr);
    } else if (rightBoolean != null) {
        return replace(node, rightBoolean.booleanValue(), leftExpr);
    }
    Expression leftOppositeExpr = null;
    final PrefixExpression leftPrefix = as(leftExpr, PrefixExpression.class);
    if (leftPrefix != null && hasOperator(leftPrefix, NOT)) {
        leftOppositeExpr = leftPrefix.getOperand();
    }
    Expression rightOppositeExpr = null;
    final PrefixExpression rightPrefix = as(rightExpr, PrefixExpression.class);
    if (rightPrefix != null && hasOperator(rightPrefix, NOT)) {
        rightOppositeExpr = rightPrefix.getOperand();
    }
    final ASTBuilder b = this.ctx.getASTBuilder();
    final Refactorings r = this.ctx.getRefactorings();
    if (leftOppositeExpr != null && rightOppositeExpr != null) {
        r.replace(node, b.infixExpr(b.copy(leftOppositeExpr), getAppropriateOperator(node), b.copy(rightOppositeExpr)));
        return DO_NOT_VISIT_SUBTREE;
    } else if (leftOppositeExpr != null) {
        final Operator reverseOp = getReverseOperator(node);
        r.replace(node, b.infixExpr(b.copy(leftOppositeExpr), reverseOp, b.copy(rightExpr)));
        return DO_NOT_VISIT_SUBTREE;
    } else if (rightOppositeExpr != null) {
        final Operator reverseOp = getReverseOperator(node);
        r.replace(node, b.infixExpr(b.copy(leftExpr), reverseOp, b.copy(rightOppositeExpr)));
        return DO_NOT_VISIT_SUBTREE;
    }
    return VISIT_SUBTREE;
}
Also used : Operator(org.eclipse.jdt.core.dom.InfixExpression.Operator) PostfixExpression(org.eclipse.jdt.core.dom.PostfixExpression) ConditionalExpression(org.eclipse.jdt.core.dom.ConditionalExpression) InstanceofExpression(org.eclipse.jdt.core.dom.InstanceofExpression) Expression(org.eclipse.jdt.core.dom.Expression) ParenthesizedExpression(org.eclipse.jdt.core.dom.ParenthesizedExpression) InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) CastExpression(org.eclipse.jdt.core.dom.CastExpression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) Refactorings(org.autorefactor.refactoring.Refactorings) ASTBuilder(org.autorefactor.refactoring.ASTBuilder)

Example 9 with PrefixExpression

use of org.eclipse.jdt.core.dom.PrefixExpression in project AutoRefactor by JnRouvignac.

the class AbstractUnitTestRefactoring method maybeRefactorStatement.

/**
 * Maybe refactor the statement.
 *
 * @param nodeToReplace
 *            The node
 * @param originalMethod
 *            The method invocation
 * @param isAssertTrue
 *            True if assertTrue is used, False if assertFalse is used.
 * @param condition
 *            The condition on which the assert is based.
 * @param failureMessage
 *            The failure message or null.
 * @param isRewriteNeeded
 *            True if is the rewriting is needed.
 * @return True if refactored
 */
protected boolean maybeRefactorStatement(final ASTNode nodeToReplace, final MethodInvocation originalMethod, final boolean isAssertTrue, final Expression condition, final Expression failureMessage, final boolean isRewriteNeeded) {
    Expression localCondition = condition;
    boolean localIsAssertTrue = isAssertTrue;
    boolean localIsRewriteNeeded = isRewriteNeeded;
    PrefixExpression localConditionPe = as(localCondition, PrefixExpression.class);
    while (hasOperator(localConditionPe, NOT)) {
        localIsRewriteNeeded = true;
        localIsAssertTrue = !localIsAssertTrue;
        localCondition = as(localConditionPe.getOperand(), Expression.class);
        localConditionPe = as(localCondition, PrefixExpression.class);
    }
    final InfixExpression conditionIe = as(localCondition, InfixExpression.class);
    final MethodInvocation conditionMi = as(localCondition, MethodInvocation.class);
    final Object constantValue = localCondition.resolveConstantExpressionValue();
    return maybeRefactorAssertTrueOrFalse(nodeToReplace, originalMethod, localIsAssertTrue, localCondition, conditionIe, conditionMi, constantValue, failureMessage, localIsRewriteNeeded);
}
Also used : InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) Expression(org.eclipse.jdt.core.dom.Expression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression) InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) MethodInvocation(org.eclipse.jdt.core.dom.MethodInvocation)

Example 10 with PrefixExpression

use of org.eclipse.jdt.core.dom.PrefixExpression in project AutoRefactor by JnRouvignac.

the class ASTBuilder method prefixExpr.

private Expression prefixExpr(PrefixExpression.Operator operator, Expression operand) {
    final PrefixExpression pe = ast.newPrefixExpression();
    pe.setOperator(operator);
    pe.setOperand(operand);
    return pe;
}
Also used : PrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression)

Aggregations

PrefixExpression (org.eclipse.jdt.core.dom.PrefixExpression)60 Expression (org.eclipse.jdt.core.dom.Expression)48 InfixExpression (org.eclipse.jdt.core.dom.InfixExpression)47 ParenthesizedExpression (org.eclipse.jdt.core.dom.ParenthesizedExpression)27 ConditionalExpression (org.eclipse.jdt.core.dom.ConditionalExpression)22 CastExpression (org.eclipse.jdt.core.dom.CastExpression)19 PostfixExpression (org.eclipse.jdt.core.dom.PostfixExpression)15 InstanceofExpression (org.eclipse.jdt.core.dom.InstanceofExpression)12 MethodInvocation (org.eclipse.jdt.core.dom.MethodInvocation)12 ASTNode (org.eclipse.jdt.core.dom.ASTNode)10 AST (org.eclipse.jdt.core.dom.AST)9 Assignment (org.eclipse.jdt.core.dom.Assignment)9 ITypeBinding (org.eclipse.jdt.core.dom.ITypeBinding)9 LambdaExpression (org.eclipse.jdt.core.dom.LambdaExpression)9 NumberLiteral (org.eclipse.jdt.core.dom.NumberLiteral)7 ThisExpression (org.eclipse.jdt.core.dom.ThisExpression)7 SimpleName (org.eclipse.jdt.core.dom.SimpleName)6 VariableDeclarationExpression (org.eclipse.jdt.core.dom.VariableDeclarationExpression)6 List (java.util.List)5 ASTRewrite (org.autorefactor.jdt.core.dom.ASTRewrite)5