From 0b752f7819512e7228a5a0ba5aab58e2d4de47f7 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 31 Aug 2017 16:54:03 +0200 Subject: [PATCH] IPP: fix IOE --- ...ceFormatStringWithConcatenationIntention.java | 16 +++++++--------- ...rmatStringWithConcatenationIntentionTest.java | 13 +++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntention.java index 1b9ee8707c9e..5289c5f53918 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntention.java @@ -90,17 +90,12 @@ public class ReplaceFormatStringWithConcatenationIntention extends Intention { final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)element; final PsiExpressionList argumentList = methodCallExpression.getArgumentList(); final PsiExpression[] arguments = argumentList.getExpressions(); - final String replacementExpression; - if (ExpressionUtils.hasStringType(arguments[0])) { - replacementExpression = buildReplacementExpression(arguments, 0); - } - else { - replacementExpression = buildReplacementExpression(arguments, 1); - } + final String replacementExpression = + ExpressionUtils.hasStringType(arguments[0]) ? buildReplacementExpression(arguments, 0) : buildReplacementExpression(arguments, 1); PsiReplacementUtil.replaceExpression(methodCallExpression, replacementExpression); } - public String buildReplacementExpression(PsiExpression[] arguments, int indexOfFormatString) { + public static String buildReplacementExpression(PsiExpression[] arguments, int indexOfFormatString) { final StringBuilder builder = new StringBuilder(); String value = (String)ExpressionUtils.computeConstantExpression(arguments[indexOfFormatString]); assert value != null; @@ -113,7 +108,10 @@ public class ReplaceFormatStringWithConcatenationIntention extends Intention { if (builder.length() > 0) { builder.append('+'); } - builder.append('"').append(value.substring(start, end)).append("\"+"); + builder.append('"').append(value.substring(start, end)).append('"'); + } + if (builder.length() > 0) { + builder.append('+'); } count++; final PsiExpression argument = arguments[indexOfFormatString + count]; diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntentionTest.java index 10ddba4defff..751b5ad9cb44 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/concatenation/ReplaceFormatStringWithConcatenationIntentionTest.java @@ -59,4 +59,17 @@ public class ReplaceFormatStringWithConcatenationIntentionTest extends IPPTestCa "}"); } + public void testMultipleWithNothingInBetween() { + doTest("class X {" + + " String m(String tempDataFolderPath, String fileName) {" + + " return String.format(\"%s/f%s%s\", /*_Replace 'String.format()' with concatenation*/tempDataFolderPath, Double.toString(Math.random()), fileName);" + + " }" + + "}", + + "class X {" + + " String m(String tempDataFolderPath, String fileName) {" + + " return tempDataFolderPath + \"/f\" + Double.toString(Math.random()) + fileName;" + + " }" + + "}"); + } } \ No newline at end of file