diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java index e12a7a0b13dc..506b89cdb0ef 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java @@ -561,8 +561,14 @@ class CollectMigration extends BaseStreamApiMigration { @Override void cleanUp() { PsiLocalVariable target = getTargetVariable(); - target.getTypeElement() - .replace(JavaPsiFacade.getElementFactory(target.getProject()).createTypeElementFromText(CommonClassNames.JAVA_LANG_STRING, target)); + PsiElementFactory factory = JavaPsiFacade.getElementFactory(target.getProject()); + target.getTypeElement().replace(factory.createTypeElementFromText(CommonClassNames.JAVA_LANG_STRING, target)); + if (getStatus() == InitializerUsageStatus.AT_WANTED_PLACE) { + PsiExpression initializer = target.getInitializer(); + if (initializer != null) { + initializer.replace(factory.createExpressionFromText("\"\"", target)); + } + } Collection usages = ReferencesSearch.search(target).findAll(); for (PsiReference usage : usages) { PsiElement element = usage.getElement(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java new file mode 100644 index 000000000000..880b04bd77d3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java @@ -0,0 +1,15 @@ +// "Replace with collect" "true" + +import java.util.List; +import java.util.stream.Collectors; + +public class Test { + static String test(List list) { + String sb = ""; + if(!list.isEmpty()) { + sb = list.stream().filter(s -> !s.isEmpty()).collect(Collectors.joining()); + } + String s = sb; + return s.trim(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java new file mode 100644 index 000000000000..5dc7fe299bc0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java @@ -0,0 +1,16 @@ +// "Replace with collect" "false" + +import java.util.List; + +public class Test { + static String test(List list) { + // Not supported for now + StringBuilder sb = new StringBuilder("initial"); + for (String s : list) { + if (!s.isEmpty()) { + sb.append(s); + } + } + return sb.toString().trim(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java new file mode 100644 index 000000000000..bbd79e991d99 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java @@ -0,0 +1,18 @@ +// "Replace with collect" "true" + +import java.util.List; + +public class Test { + static String test(List list) { + StringBuffer sb = new StringBuffer(); + if(!list.isEmpty()) { + for (String s : list) { + if (!s.isEmpty()) { + sb.append(s); + } + } + } + String s = sb.toString(); + return s.trim(); + } +} \ No newline at end of file