diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindFirstMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindFirstMigration.java index a52b72c89a4b..f096d6c55790 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindFirstMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindFirstMigration.java @@ -42,7 +42,9 @@ class FindFirstMigration extends BaseStreamApiMigration { PsiStatement[] statements = tb.getStatements(); if (statements.length != 2) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); - if (assignment == null) { + if (assignment == null || tb.getVariable().getType() instanceof PsiPrimitiveType) { + // if we found an assignment with primitive stream variable, then we are not assigning to local variable + // (see StreamApiMigrationInspection#findMigrationForBreak), thus it could be handled via ifPresent() if(!(statements[0] instanceof PsiExpressionStatement)) return null; PsiExpression expression = ((PsiExpressionStatement)statements[0]).getExpression(); return ct.replaceAndRestoreComments( diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstMap.java new file mode 100644 index 000000000000..dba58daaf363 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstMap.java @@ -0,0 +1,19 @@ +// "Replace with findFirst()" "true" + +import java.util.stream.IntStream; + +class Lookup { + boolean matches(char[] lookup) {} +} + +// IDEA-200209 +class C { + private Lookup[] lookbehindFormats; + private char[] lookupChars; + private Lookup lookbehindFormat; + + { + IntStream.range(0, lookbehindFormats.length).filter(i -> lookbehindFormats[i].matches(lookupChars)).findFirst().ifPresent(i -> lookbehindFormat = lookbehindFormats[i]); + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstMap.java new file mode 100644 index 000000000000..20a5f05b6e74 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstMap.java @@ -0,0 +1,22 @@ +// "Replace with findFirst()" "true" + +class Lookup { + boolean matches(char[] lookup) {} +} + +// IDEA-200209 +class C { + private Lookup[] lookbehindFormats; + private char[] lookupChars; + private Lookup lookbehindFormat; + + { + for (int i = 0; i < lookbehindFormats.length; i++) { + if (lookbehindFormats[i].matches(lookupChars)) { + lookbehindFormat = lookbehindFormats[i]; + break; + } + } + + } +} \ No newline at end of file