diff --git a/java/java-impl/src/com/intellij/codeInspection/util/OptionalUtil.java b/java/java-impl/src/com/intellij/codeInspection/util/OptionalUtil.java index 0364a211d11e..40ab64b6f6b7 100644 --- a/java/java-impl/src/com/intellij/codeInspection/util/OptionalUtil.java +++ b/java/java-impl/src/com/intellij/codeInspection/util/OptionalUtil.java @@ -170,7 +170,10 @@ public class OptionalUtil { PsiMethod method = mappedStream.resolveMethod(); if(method != null && method.getContainingClass() != null) { String className = method.getContainingClass().getQualifiedName(); - if(className != null && className.startsWith("java.util.stream.")) { + PsiParameter[] parameters = method.getParameterList().getParameters(); + if(className != null && className.startsWith("java.util.stream.") + && parameters.length == 1 + && !(parameters[0].getType() instanceof PsiArrayType)) { PsiExpression arg = args[0]; if(ExpressionUtils.isReferenceTo(arg, var)) { return qualifier + ".stream()"; diff --git a/java/java-tests/testData/inspection/optionalChains/afterArrayMapStream.java b/java/java-tests/testData/inspection/optionalChains/afterArrayMapStream.java new file mode 100644 index 000000000000..ba86859981c2 --- /dev/null +++ b/java/java-tests/testData/inspection/optionalChains/afterArrayMapStream.java @@ -0,0 +1,10 @@ +// "Simplify optional chain to '...isPresent()'" "true" +import java.util.Optional; + +public class Test { + + public void test() { + Optional s = Optional.of(new String[] {"1","2","3"}); + Stream s1 = s.map(Stream::of).orElse(Stream.empty()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/optionalChains/afterStreamJava9.java b/java/java-tests/testData/inspection/optionalChains/afterStreamJava9.java index 15ec88133ccc..ac90580e168c 100644 --- a/java/java-tests/testData/inspection/optionalChains/afterStreamJava9.java +++ b/java/java-tests/testData/inspection/optionalChains/afterStreamJava9.java @@ -9,7 +9,7 @@ public final class MyClass { } public static void testStream(Person p) { - p.name().stream().forEach(System.out::println); + p.name().stream().flatMap(Stream::of).forEach(System.out::println); p.name().stream().map(String::trim).forEach(System.out::println); p.name().stream().flatMap(n -> Stream.of(n.split(""))).forEach(System.out::println); p.name().stream().mapToInt(String::length).forEach(System.out::println); diff --git a/java/java-tests/testData/inspection/optionalChains/beforeArrayMapStream.java b/java/java-tests/testData/inspection/optionalChains/beforeArrayMapStream.java new file mode 100644 index 000000000000..fbdd1ef1b135 --- /dev/null +++ b/java/java-tests/testData/inspection/optionalChains/beforeArrayMapStream.java @@ -0,0 +1,11 @@ +// "Simplify optional chain to 's.stream()'" "false" +import java.util.Optional; +import java.util.stream.Stream; + +public class Test { + + public void test() { + Optional s = Optional.of(new String[] {"1","2","3"}); + Stream s1 = s.map(Stream::of).orElse(Stream.empty()); + } +} \ No newline at end of file