From 87a77314775c1245a83a4837a64752707c91780e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 11 Mar 2015 16:09:22 +0100 Subject: [PATCH] disable stream conversion if qualifier is used inside method call args (IDEA-137186) (cherry picked from commit 24dfdad535f2c33e4d1f4d004a28b0ca45012c1b) --- .../StreamApiMigrationInspection.java | 6 +++++ .../beforeTooLazyCalculation.java | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java 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