From cca1cec121801cae73441c9ef8a128a85e314d40 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 10 Jan 2020 15:07:16 +0700 Subject: [PATCH] IDEA-230363 Freeze in StreamApiMigrationInspection when StringBuilder-append-loop is followed by append to another StringBuilder GitOrigin-RevId: c7bc72635a3322ecdd9eea6b47b997154a0ad014 --- .../streamMigration/JoiningMigration.java | 7 ++++--- .../streamApiMigration/joining/afterWrongBuilder.java | 11 +++++++++++ .../joining/beforeWrongBuilder.java | 11 +++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/afterWrongBuilder.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/beforeWrongBuilder.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java index 45cc24e9546b..49092469e1da 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java @@ -519,10 +519,11 @@ public class JoiningMigration extends BaseStreamApiMigration { if (qualifier instanceof PsiMethodCallExpression) { call = (PsiMethodCallExpression)qualifier; } + else if (ExpressionUtils.isReferenceTo(qualifier, target)) { + return new AppendChain(call, topCall); + } else { - if (ExpressionUtils.isReferenceTo(qualifier, target)) { - return new AppendChain(call, topCall); - } + return null; } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/afterWrongBuilder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/afterWrongBuilder.java new file mode 100644 index 000000000000..995a556c0b53 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/afterWrongBuilder.java @@ -0,0 +1,11 @@ +import java.util.stream.IntStream; + +// "Replace with forEach" "true" +class X { + private void initBuilder() { + StringBuilder builder = new StringBuilder(); + StringBuilder spaces = new StringBuilder(); + IntStream.range(0, 20).mapToObj(i -> " ").forEach(spaces::append); + builder.append(spaces); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/beforeWrongBuilder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/beforeWrongBuilder.java new file mode 100644 index 000000000000..44eeb1bbfe98 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/joining/beforeWrongBuilder.java @@ -0,0 +1,11 @@ +// "Replace with forEach" "true" +class X { + private void initBuilder() { + StringBuilder builder = new StringBuilder(); + StringBuilder spaces = new StringBuilder(); + for(int i = 0; i < 20; i++) { + spaces.append(" "); + } + builder.append(spaces); + } +} \ No newline at end of file