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 668917c2533f..057e8340a425 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java @@ -136,6 +136,12 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (ReferencesSearch.search(parameter, new LocalSearchScope(qualifierExpression)).findFirst() != null) { return false; } + final PsiElement resolve = ((PsiReferenceExpression)qualifierExpression).resolve(); + if (resolve instanceof PsiVariable) { + if (ReferencesSearch.search(resolve, new LocalSearchScope(methodCallExpression.getArgumentList())).findFirst() != null) { + return false; + } + } qualifierClass = PsiUtil.resolveClassInType(qualifierExpression.getType()); } else if (qualifierExpression == null) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java new file mode 100644 index 000000000000..b81060537fbc --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java @@ -0,0 +1,22 @@ +// "Replace with forEach" "false" +import java.util.*; + +class A { + public static void main(String[] args) { + List names = Arrays.asList("Bob", "Alice", "Bob", "Carol"); + Set uniqNames = new HashSet<>(names.size()); + for (String name : names){ + uniqNames.add(makeNameUnique(name, uniqNames)); + } + uniqNames.forEach(System.out::println); + } + + private static String makeNameUnique(final String name, final Set uniqNames) { + if (uniqNames.contains(name)) { + return name + "1"; + } + return name; + } + + +} \ No newline at end of file