From e683dc8fc1ff3a4f1fa60067d4f6582734f1a46e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 28 Feb 2014 16:48:15 +0100 Subject: [PATCH] new inference: wildcard parametrization for lambda with formal params: assignability check for complete parametrization only --- .../FunctionalInterfaceParameterizationUtil.java | 6 +----- .../LambdaFormalParamTypesParametrization.java | 10 ++++++++++ .../FunctionalTypeWildcardParameterizationTest.java | 4 ++++ 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/LambdaFormalParamTypesParametrization.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java index 47eafa49fcfa..f1439e6a219d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/FunctionalInterfaceParameterizationUtil.java @@ -118,14 +118,10 @@ public class FunctionalInterfaceParameterizationUtil { return null; } - if (!TypeConversionUtil.containsWildcards(parameterization)) { + if (!TypeConversionUtil.containsWildcards(parameterization) && psiClassType.isAssignableFrom(parameterization)) { return parameterization; } - if (!psiClassType.isAssignableFrom(parameterization)) { - return null; - } - return getNonWildcardParameterization((PsiClassType)psiClassType); } return null; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/LambdaFormalParamTypesParametrization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/LambdaFormalParamTypesParametrization.java new file mode 100644 index 000000000000..0dbcc3e35fec --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/LambdaFormalParamTypesParametrization.java @@ -0,0 +1,10 @@ +import java.util.function.Function; + +class Test { + + void foo(Function m) {} + + { + foo((String e) -> e.length()); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalTypeWildcardParameterizationTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalTypeWildcardParameterizationTest.java index 4fe2aa494f00..2e32026af72d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalTypeWildcardParameterizationTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/FunctionalTypeWildcardParameterizationTest.java @@ -28,6 +28,10 @@ public class FunctionalTypeWildcardParameterizationTest extends LightDaemonAnaly doTest(); } + public void testLambdaFormalParamTypesParametrization() throws Exception { + doTest(); + } + private void doTest() { IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable()); doTestNewInference(BASE_PATH + "/" + getTestName(false) + ".java", false, false);