diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java index 615c8deb4188..68da73f5f495 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java @@ -801,7 +801,6 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo PsiElement element = ((PsiReferenceExpression)operand).resolve(); if (!(element instanceof PsiLocalVariable)) return; PsiLocalVariable var = (PsiLocalVariable)element; - final StringBuilder builder = generateStream(iteratedValue, intermediateOps); PsiExpression addend = extractAddend(assignment); if (addend == null) return; @@ -819,10 +818,11 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo else { typeName = "Int"; } - builder.append(".mapTo").append(typeName).append('('); - builder.append(compoundLambdaOrMethodReference(tb.getVariable(), addend, "java.util.function.To" + typeName + "Function", - new PsiType[]{tb.getVariable().getType()})); - builder.append(").sum()"); + intermediateOps.add(".mapTo" + typeName + "(" + + compoundLambdaOrMethodReference(tb.getVariable(), addend, "java.util.function.To" + typeName + "Function", + new PsiType[]{tb.getVariable().getType()})+")"); + final StringBuilder builder = generateStream(iteratedValue, intermediateOps); + builder.append(".sum()"); replaceWithNumericAddition(project, foreachStatement, var, builder, typeName.toLowerCase(Locale.ENGLISH)); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java new file mode 100644 index 000000000000..74ee08bf3ca0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java @@ -0,0 +1,14 @@ +// "Replace with sum()" "true" + +import java.util.List; + +public class Main { + interface Person { + int getAge(); + } + + public long test(List collection) { + long i = collection.stream().mapToLong(Person::getAge).sum(); + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java new file mode 100644 index 000000000000..770bd720249a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java @@ -0,0 +1,17 @@ +// "Replace with sum()" "true" + +import java.util.List; + +public class Main { + interface Person { + int getAge(); + } + + public long test(List collection) { + long i = 0; + for(Person person : collection) { + i = i + person.getAge(); + } + return i; + } +} \ No newline at end of file