From b91a8e6d6b894e2bbc0cc5dda24c5f42ce985faa Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 12 Sep 2012 16:59:14 +0200 Subject: [PATCH] IDEA-91439 (StringBuffer replacement with String is wrong when char[] is involved) --- .../StringBufferReplaceableByStringInspection.java | 10 ++++++---- .../style/replace_with_string/NonString2.after.java | 4 ++-- .../style/replace_with_string/NonString2.java | 2 +- .../StringBufferReplaceableWithStringFixTest.java | 12 ++++++------ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java index f5eee75567b6..78a830dd598d 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/StringBufferReplaceableByStringInspection.java @@ -180,9 +180,11 @@ public class StringBufferReplaceableByStringInspection extends BaseInspection { result.append('(').append(argument.getText()).append(')'); } else { - result.append(argument.getText()); if (type != null && !type.equalsToText(CommonClassNames.JAVA_LANG_STRING)) { - result.append(".toString()"); + result.append("String.valueOf(").append(argument.getText()).append(")"); + } + else { + result.append(argument.getText()); } } } @@ -280,7 +282,7 @@ public class StringBufferReplaceableByStringInspection extends BaseInspection { public static boolean isAppend(PsiMethodCallExpression methodCallExpression) { final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); - final String methodName = methodExpression.getReferenceName(); + @NonNls final String methodName = methodExpression.getReferenceName(); return "append".equals(methodName); } } @@ -299,7 +301,7 @@ public class StringBufferReplaceableByStringInspection extends BaseInspection { if (!(grandParent instanceof PsiMethodCallExpression)) { break; } - final String name = referenceExpression.getReferenceName(); + @NonNls final String name = referenceExpression.getReferenceName(); if ("append".equals(name)) { final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)grandParent; final PsiExpressionList argumentList = methodCallExpression.getArgumentList(); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.after.java index bf867ce0efdd..77b668647c29 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.after.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.after.java @@ -2,7 +2,7 @@ package com.siyeh.igfixes.style.replace_with_string; class NonString2 { - String foo(Object o) { - return o.toString(); + String foo(char[] o) { + return String.valueOf(o); } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.java index 8005bbcbf376..2b703e8c9209 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/replace_with_string/NonString2.java @@ -2,7 +2,7 @@ package com.siyeh.igfixes.style.replace_with_string; class NonString2 { - String foo(Object o) { + String foo(char[] o) { return new StringBuilder().append(o).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 0fbcea0f3655..457b455a037a 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/StringBufferReplaceableWithStringFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/StringBufferReplaceableWithStringFixTest.java @@ -15,13 +15,13 @@ public class StringBufferReplaceableWithStringFixTest extends IGQuickFixesTestCa } public void testSimpleStringBuffer() { doTest(); } - public void testStringBuilderAppend() { doTest("StringBuilderAppend", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } + public void testStringBuilderAppend() { doTest(InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } public void testStringBufferVariable() { doTest(); } public void testStringBufferVariable2() { doTest(); } public void testStartsWithPrimitive() { doTest(); } - public void testPrecedence() { doTest("Precedence", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } - public void testPrecedence2() { doTest("Precedence2", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } - public void testPrecedence3() { doTest("Precedence3", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } - public void testNonString1() { doTest("Precedence3", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } - public void testNonString2() { doTest("Precedence3", InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } + public void testPrecedence() { doTest(InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } + public void testPrecedence2() { doTest(InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } + public void testPrecedence3() { doTest(InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } + public void testNonString1() { doTest(InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } + public void testNonString2() { doTest(InspectionGadgetsBundle.message("string.builder.replaceable.by.string.quickfix")); } }