From 07a332598abfa5dcb3858884aed59a5462b00289 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 1 Feb 2017 19:05:38 +0100 Subject: [PATCH] ensure additional constrains are collected based on ground functional type (IDEA-167277) --- .../resolve/graphInference/InferenceSession.java | 3 ++- ...ctLambdaAdditionalConstraintsByGroundType.java | 15 +++++++++++++++ .../daemon/lambda/NewLambdaHighlightingTest.java | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/CollectLambdaAdditionalConstraintsByGroundType.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 aa59fe6da5ea..5c1cc708962f 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 @@ -501,7 +501,8 @@ public class InferenceSession { } else if (arg instanceof PsiLambdaExpression && isPertinentToApplicability(arg, parentMethod)) { - collectLambdaReturnExpression(additionalConstraints, ignoredConstraints, (PsiLambdaExpression)arg, parameterType, + collectLambdaReturnExpression(additionalConstraints, ignoredConstraints, (PsiLambdaExpression)arg, + FunctionalInterfaceParameterizationUtil.getGroundTargetType(parameterType, (PsiLambdaExpression)arg), !isProperType(initialSubstitutor.substitute(parameterType)), initialSubstitutor); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/CollectLambdaAdditionalConstraintsByGroundType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/CollectLambdaAdditionalConstraintsByGroundType.java new file mode 100644 index 000000000000..54662681b777 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/CollectLambdaAdditionalConstraintsByGroundType.java @@ -0,0 +1,15 @@ +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class Main { + + public void main(Stream> stream) { + supp(() -> stream.collect(Collectors. toMap(Entry::getKey, Entry::getValue))); + supp(() -> stream.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()))); + } + + void supp(Supplier> s) {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java index 0b90d35e703b..2b3b3e2f8475 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java @@ -335,6 +335,10 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testCollectLambdaAdditionalConstraintsByGroundType() throws Exception { + doTest(); + } + public void testInferTypeParametersFromFunctionalInterfaceInputs() throws Exception { doTest(); }