From fd4989784944335cd481f76967f4c77055425f48 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 31 Jan 2012 20:38:30 +0100 Subject: [PATCH] add parentheses when necessary in quickfix for 'StringBuffer' can be replaced with 'String' --- ...tringBufferReplaceableByStringInspection.java | 16 ++++++++++++++-- .../replace_with_string/Precedence.after.java | 9 +++++++++ .../style/replace_with_string/Precedence.java | 12 ++++++++++++ ...StringBufferReplaceableWithStringFixTest.java | 1 + 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.after.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java index a7e13174cc6f..ce539165b140 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java @@ -24,6 +24,7 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.psiutils.ParenthesesUtils; import com.siyeh.ig.psiutils.TypeUtils; import com.siyeh.ig.psiutils.VariableAccessUtils; import org.jetbrains.annotations.NotNull; @@ -141,7 +142,13 @@ public class StringBufferReplaceableByStringInspection extends BaseInspection { } final PsiExpression argument = arguments[0]; if (result.length() != 0) { - result.append('+').append(argument.getText()); + result.append('+'); + if (ParenthesesUtils.getPrecedence(argument) > ParenthesesUtils.ADDITIVE_PRECEDENCE) { + result.append('(').append(argument.getText()).append(')'); + } + else { + result.append(argument.getText()); + } } else { final PsiType type = argument.getType(); @@ -149,7 +156,12 @@ public class StringBufferReplaceableByStringInspection extends BaseInspection { result.append("String.valueOf(").append(argument.getText()).append(")"); } else { - result.append(argument.getText()); + if (ParenthesesUtils.getPrecedence(argument) > ParenthesesUtils.ADDITIVE_PRECEDENCE) { + result.append('(').append(argument.getText()).append(')'); + } + else { + result.append(argument.getText()); + } } } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.after.java new file mode 100644 index 000000000000..5b82285a2896 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.after.java @@ -0,0 +1,9 @@ +package com.siyeh.igfixes.style.replace_with_string; + +import java.awt.*; + +class Precedence { + public static String toRgbColor( final Color color) { + return "rgba(" + color.getRed() + ',' + color.getGreen() + ',' + color.getBlue() + ',' + (color.getAlpha() == 0 ? '0' : String.format("0.%2d", (int) (color.getAlpha() / 255.0 * 100))) + ')' + 9 * 9; + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.java new file mode 100644 index 000000000000..bc35808b72d6 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/Precedence.java @@ -0,0 +1,12 @@ +package com.siyeh.igfixes.style.replace_with_string; + +import java.awt.*; + +class Precedence { + public static String toRgbColor( final Color color) { + return new StringBuilder("rgba(").append(color.getRed()).append(',') + .append(color.getGreen()).append(',').append(color.getBlue()) + .append(',').append(color.getAlpha() == 0 ? '0' : String.format("0.%2d", (int) (color.getAlpha() / 255.0 * 100))) + .append(')').append(9*9).toString(); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/StringBufferReplaceableWithStringFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/StringBufferReplaceableWithStringFixTest.java index 0d03db24fa17..1db03b736071 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/StringBufferReplaceableWithStringFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/StringBufferReplaceableWithStringFixTest.java @@ -33,4 +33,5 @@ public class StringBufferReplaceableWithStringFixTest extends IGQuickFixesTestCa public void testStringBuilderAppend() { doTest("StringBuilderAppend", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } public void testStringBufferVariable() { doTest(); } public void testStartsWithPrimitive() { doTest(); } + public void testPrecedence() { doTest("Precedence", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } }