From e59155ed165b491c72b50cce7094eeb6d9e8086f Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 29 Apr 2021 21:04:47 +0200 Subject: [PATCH] java: discard functional expressions with unbounded wildcards which type parameters depend on other type parameters (IDEA-267644) old spec issue is still not resolved and most probably won't be resolved in the future as would lead to the incompatibilities GitOrigin-RevId: be74d8ca83ce3c47d1e3dc9eb08de789fb881d2b --- ...nctionalInterfaceParameterizationUtil.java | 3 +++ .../NonWildcardParametrization.java | 21 +++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) 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 cf447b2262a1..0036dfce30a8 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 @@ -175,6 +175,9 @@ public final class FunctionalInterfaceParameterizationUtil { final PsiType bound = ((PsiWildcardType)paramType).getBound(); for (PsiClassType paramBound : typeParameters[i].getExtendsListTypes()) { if (PsiTypesUtil.mentionsTypeParameters(paramBound, typeParametersSet)) { + if (bound == null) { + return null; + } newParameters[i] = bound; continue next; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/NonWildcardParametrization.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/NonWildcardParametrization.java index e1c14d30abee..c499111a2546 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/NonWildcardParametrization.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/wildcardParametrization/NonWildcardParametrization.java @@ -36,9 +36,9 @@ class ExtendsList { } { - I n = () -> null; - I n1 = () -> null; - I n2 = () -> null; + I n = () -> null; + I n1 = () -> null; + I n2 = () -> null; I, String> e1 = () -> null; @@ -59,7 +59,7 @@ class MultipleBounds { interface LC extends List, Comparable {} { - I n = () -> null; + I n = () -> null; I, ? extends String> e1 = () -> null; I, ? extends String> e2 = () -> null; @@ -77,7 +77,7 @@ class FirstIndependentBound { interface LC extends List, Comparable {} { - I n = () -> null; + I n = () -> null; I, ? extends String> e1 = () -> null; I, ? extends String> e2 = () -> null; @@ -96,7 +96,7 @@ class SecondIndependentBound { interface LC extends List, Comparable {} { - I n = () -> null; + I n = () -> null; I, ? extends String> e1 = () -> null; I, ? extends String> e2 = () -> null; @@ -105,4 +105,13 @@ class SecondIndependentBound { I, String> e5 = () -> null; I, ? extends String> e6 = () -> null; } +} + +interface Unbound { + void accept(); + + static void m() { + Unbound s = () -> {}; + Unbound s1 = () -> {}; + } } \ No newline at end of file