diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/CFGBuilder.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/CFGBuilder.java index 8a2cac28af70..17456a2ea826 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/CFGBuilder.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/CFGBuilder.java @@ -726,6 +726,7 @@ public class CFGBuilder { push(factory.getConstFactory().getSentinel()); for (PsiExpression expression : expressions) { pushExpression(expression); + boxUnbox(expression, targetVariable.getVariableType()); } // Revert order add(new SpliceInstruction(expressions.length, IntStreamEx.ofIndices(expressions).toArray())); 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 de107041218d..73569a0e08ec 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 @@ -712,8 +712,10 @@ public class StreamChainInliner implements CallInliner { } if (single) { // exactly single element + PsiExpression arg = sourceCall.getArgumentList().getExpressions()[0]; builder - .pushExpression(sourceCall.getArgumentList().getExpressions()[0]) + .pushExpression(arg) + .boxUnbox(arg, inType) .chain(firstStep::before) .chain(firstStep::iteration); return; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java b/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java index 12f61c7c0f70..5fa6afb5f8d8 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java @@ -238,4 +238,16 @@ public class StreamInlining { void testToArray(List list) { list.stream().toArray(size -> null); } + + Object testBoxingExplicit() { + return String.join("\n", + Stream.of(12, 22) + .map(Object::toString) + .collect(Collectors.toList()) + ); + } + + public static void testBoxingExplicit2() { + double s = Stream.of(1).mapToDouble(x -> x * x).sum(); + } }