From 81a13b0fc04b7605874cf8aa70d8190263da4f54 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 5 Jun 2019 09:16:08 +0200 Subject: [PATCH] inference: register nested sessions for void compatible lambdas (IDEA-207070) GitOrigin-RevId: 77f740e2754917b0053fcb79fb56e2b0c62436f4 --- .../graphInference/InferenceSession.java | 2 +- ...xpressionInVoidCompatibleLambdaReturn.java | 20 +++++++++++++++++++ .../lambda/NewLambdaHighlightingTest.java | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/PolyExpressionInVoidCompatibleLambdaReturn.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java index fc8d1a17b08e..0e0bfd096c7f 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java @@ -456,7 +456,7 @@ public class InferenceSession { boolean addConstraint, PsiSubstitutor initialSubstitutor) { final PsiType interfaceReturnType = LambdaUtil.getFunctionalInterfaceReturnType(parameterType); - if (interfaceReturnType != null && !PsiType.VOID.equals(interfaceReturnType)) { + if (interfaceReturnType != null && (!PsiType.VOID.equals(interfaceReturnType) || !addConstraint)) { final List returnExpressions = LambdaUtil.getReturnExpressions(lambdaExpression); for (PsiExpression returnExpression : returnExpressions) { processReturnExpression(additionalConstraints, ignoredConstraints, returnExpression, interfaceReturnType, addConstraint, initialSubstitutor); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/PolyExpressionInVoidCompatibleLambdaReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/PolyExpressionInVoidCompatibleLambdaReturn.java new file mode 100644 index 000000000000..70f9a77ec662 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/PolyExpressionInVoidCompatibleLambdaReturn.java @@ -0,0 +1,20 @@ + +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; + +class MyTest { + + { + foo(() -> build(id(x -> x))); + } + + static I id(I i) { + return i; + } + static void foo(Runnable e) {} + + static List build(Function transformers) { + return null; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java index 3a28270d98df..3b9787052a68 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java @@ -168,6 +168,7 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase { public void testUnhandledExceptionInLambdaChain() { doTest(); } public void testFunctionalBound() { doTest(); } public void testValidFixesOnUnresolvedMethod() { doTest(); } + public void testPolyExpressionInVoidCompatibleLambdaReturn() { doTest(); } private void doTest() { IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());