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