From 5a935bfb1e4d6c59ebd2e05a3e9169b346d3366e Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 18 Oct 2011 16:02:57 +0200 Subject: [PATCH] Really fix IDEA-75562 --- ...nmentWithOperatorAssignmentInspection.java | 2 +- .../siyeh/ig/psiutils/ParenthesesUtils.java | 26 +++++++++++++++++++ ...placeAssignmentWithOperatorAssignment.java | 3 +++ .../expected.xml | 7 +++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/assignment/ReplaceAssignmentWithOperatorAssignmentInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/assignment/ReplaceAssignmentWithOperatorAssignmentInspection.java index e156bacf3c4c..e96975c718b7 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/assignment/ReplaceAssignmentWithOperatorAssignmentInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/assignment/ReplaceAssignmentWithOperatorAssignmentInspection.java @@ -185,7 +185,7 @@ public class ReplaceAssignmentWithOperatorAssignmentInspection extends BaseInspe if (operands.length < 2) { return; } - if (operands.length > 2 && !ParenthesesUtils.isCommutativeBinaryOperator(polyadicExpression.getOperationTokenType())) { + if (operands.length > 2 && !ParenthesesUtils.isAssociativeOperation(polyadicExpression)) { return; } for (PsiExpression operand : operands) { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ParenthesesUtils.java b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ParenthesesUtils.java index c4bb0bf35768..3992ee7fa7de 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ParenthesesUtils.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ParenthesesUtils.java @@ -96,6 +96,32 @@ public class ParenthesesUtils { token.equals(JavaTokenType.GTGTGT)); } + public static boolean isAssociativeOperation(PsiPolyadicExpression expression) { + final IElementType tokenType = expression.getOperationTokenType(); + final PsiType type = expression.getType(); + final PsiPrimitiveType primitiveType; + if (type instanceof PsiClassType) { + primitiveType = PsiPrimitiveType.getUnboxedType(type); + if (primitiveType == null) { + return false; + } + } else if (type instanceof PsiPrimitiveType) { + primitiveType = (PsiPrimitiveType)type; + } else { + return false; + } + if (JavaTokenType.PLUS == tokenType || JavaTokenType.ASTERISK == tokenType) { + return primitiveType != PsiType.FLOAT && primitiveType != PsiType.DOUBLE; + } else if (JavaTokenType.EQEQ == tokenType || JavaTokenType.NE == tokenType) { + return primitiveType == PsiType.BOOLEAN; + } else if (JavaTokenType.AND == tokenType || JavaTokenType.OR == tokenType || JavaTokenType.XOR == tokenType) { + return true; + } else if (JavaTokenType.OROR == tokenType || JavaTokenType.ANDAND == tokenType) { + return true; + } + return false; + } + public static int getPrecedence(PsiExpression expression) { if (expression instanceof PsiThisExpression || expression instanceof PsiLiteralExpression || diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/ReplaceAssignmentWithOperatorAssignment.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/ReplaceAssignmentWithOperatorAssignment.java index 290443f80c5b..6d95a4c788bf 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/ReplaceAssignmentWithOperatorAssignment.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/ReplaceAssignmentWithOperatorAssignment.java @@ -24,5 +24,8 @@ public class ReplaceAssignmentWithOperatorAssignment x = x / 2 / 4; x = x >> 1 >> 1; + x = x * 2 * 2; + float f = 1; + f = f * 2 * 2; } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/expected.xml index a37d739f173e..0a0d8534142e 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/expected.xml +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/assignment/replace_assignment_with_operator_assignment/expected.xml @@ -34,4 +34,11 @@ Assignment replaceable with operator assignment <code>x = x + 2 + 2 + 2</code> could be simplified to 'x += 2 + 2 + 2' #loc + + + ReplaceAssignmentWithOperatorAssignment.java + 27 + Assignment replaceable with operator assignment + <code>x = x * 2 * 2</code> could be simplified to 'x *= 2 * 2' #loc + \ No newline at end of file