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, ? extends String> n = () -> null;
- I, ?> n1 = () -> null;
- I, String> n2 = () -> null;
+ I, ? extends String> n = () -> null;
+ I, ?> n1 = () -> null;
+ I, String> n2 = () -> null;
I extends List>, String> e1 = () -> null;
@@ -59,7 +59,7 @@ class MultipleBounds {
interface LC extends List, Comparable {}
{
- I, String> n = () -> null;
+ I, String> n = () -> null;
I extends List, ? extends String> e1 = () -> null;
I extends Comparable, ? extends String> e2 = () -> null;
@@ -77,7 +77,7 @@ class FirstIndependentBound {
interface LC extends List, Comparable {}
{
- I, String> n = () -> null;
+ I, String> n = () -> null;
I extends List, ? extends String> e1 = () -> null;
I extends Comparable, ? extends String> e2 = () -> null;
@@ -96,7 +96,7 @@ class SecondIndependentBound {
interface LC extends List, Comparable {}
{
- I, String> n = () -> null;
+ I, String> n = () -> null;
I extends List, ? extends String> e1 = () -> null;
I extends Comparable, ? extends String> e2 = () -> null;
@@ -105,4 +105,13 @@ class SecondIndependentBound {
I extends LC extends String>, String> e5 = () -> null;
I extends LC extends String>, ? extends String> e6 = () -> null;
}
+}
+
+interface Unbound {
+ void accept();
+
+ static void m() {
+ Unbound, ?> s = () -> {};
+ Unbound, ? extends Number> s1 = () -> {};
+ }
}
\ No newline at end of file