From ba3791e5ded1d8fa73e582e757d4b26b12864469 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 14 Mar 2019 11:55:48 +0700 Subject: [PATCH] IDEA-208770 Inspection `OptionalGetWithoutIsPresent` doesn't recognize check in stream --- .../dataFlow/inliner/StreamChainInliner.java | 2 ++ .../inspection/optionalGet/OptionalGet.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java index aa52bc6465a1..6e6031e420ee 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java @@ -754,8 +754,10 @@ public class StreamChainInliner implements CallInliner { // exactly single element PsiExpression arg = sourceCall.getArgumentList().getExpressions()[0]; builder + .pushForWrite(builder.createTempVariable(inType)) .pushExpression(arg) .boxUnbox(arg, inType) + .assign() .chain(firstStep::before) .chain(firstStep::iteration); return; diff --git a/java/java-tests/testData/inspection/optionalGet/OptionalGet.java b/java/java-tests/testData/inspection/optionalGet/OptionalGet.java index 8bdc4b9166b7..bfb2c84454b2 100644 --- a/java/java-tests/testData/inspection/optionalGet/OptionalGet.java +++ b/java/java-tests/testData/inspection/optionalGet/OptionalGet.java @@ -429,4 +429,19 @@ class FinallyTest System.out.println(a.getAsInt()); } } + + class X { + private String value; + public Optional getValue() { + return Optional.ofNullable(value); + } + } + + void testStream() { + // IDEA-208770 + Stream.of(new X(), new X()).filter(x -> x.getValue().isPresent()).map(x -> x.getValue().get()); + Stream.of(new X()).filter(x -> x.getValue().isPresent()).map(x -> x.getValue().get()); + X xx = new X(); + Stream.of(xx).filter(x -> x.getValue().isPresent()).map(x -> x.getValue().get()); + } } \ No newline at end of file