diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index ab97463cab91..7202ecd99d3e 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -151,7 +151,7 @@ public class LambdaUtil { } return false; } - final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(leftType); + final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(GenericsUtil.eliminateWildcards(leftType)); final PsiClass psiClass = resolveResult.getElement(); if (psiClass instanceof PsiAnonymousClass) { return isAcceptable(lambdaExpression, ((PsiAnonymousClass)psiClass).getBaseClassType(), checkReturnType); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IDEA108195.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IDEA108195.java new file mode 100644 index 000000000000..a88675fedd31 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IDEA108195.java @@ -0,0 +1,12 @@ +class Demo { + + Function, ? extends Supplier> mapper2 = (sa) -> () -> sa.get() + 1.0; + + interface Supplier { + public T get(); + } + + interface Function { + public R apply(T t); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java index 4b203962db58..c472501f45e5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java @@ -87,6 +87,7 @@ public class LambdaHighlightingTest extends LightDaemonAnalyzerTestCase { public void testConditionalInferenceFromOppositePart() { doTest(); } public void testDeclaredTypeParameterBoundsAndUnboundedWildcard() { doTest(); } public void testConflictResolution() throws Exception {doTest();} + public void testIDEA108195() throws Exception {doTest();} private void doTest() { doTest(false);