From 69c86b0b454e9269d7258df9e34f77fab69899ec Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 28 Dec 2016 13:08:44 +0700 Subject: [PATCH] StringConcatenationInLoop#isAppended: check whether polyadic expression is actually a concatenation (IDEA-CR-16590) --- .../performance/StringConcatenationInLoopsInspection.java | 7 +++++-- .../StringConcatenationInLoop.java | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java index 98210eb7cd6c..48e13e47fa1b 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java @@ -215,8 +215,11 @@ public class StringConcatenationInLoopsInspection extends BaseInspection { private static boolean isAppended(PsiVariable variable, PsiExpression expression) { expression = PsiUtil.skipParenthesizedExprDown(expression); if(expression instanceof PsiPolyadicExpression) { - for(PsiExpression operand : ((PsiPolyadicExpression)expression).getOperands()) { - if(ExpressionUtils.isReferenceTo(operand, variable) || isAppended(variable, operand)) return true; + PsiPolyadicExpression polyadicExpression = (PsiPolyadicExpression)expression; + if (polyadicExpression.getOperationTokenType().equals(JavaTokenType.PLUS)) { + for (PsiExpression operand : polyadicExpression.getOperands()) { + if (ExpressionUtils.isReferenceTo(operand, variable) || isAppended(variable, operand)) return true; + } } } return false; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_concatenation_in_loops/StringConcatenationInLoop.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_concatenation_in_loops/StringConcatenationInLoop.java index 161975019d55..4d75f34d9306 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_concatenation_in_loops/StringConcatenationInLoop.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_concatenation_in_loops/StringConcatenationInLoop.java @@ -94,6 +94,12 @@ public class StringConcatenationInLoop System.out.println(s); } } + for (int i = 0; i < 10; i++) { + s = (s == "") + "..."; + } + for (int i = 0; i < 10; i++) { + s = ("xyz" + (i + s)) + "..."; + } System.out.println(foo); return foo; }