diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java index 925582ba4921..add00d989836 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java @@ -197,8 +197,9 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm } } - constraints.add(new TypeCompatibilityConstraint(returnType, - session.substituteWithInferenceVariables(psiSubstitutor.substitute(referencedMethodReturnType)))); + final PsiType capturedReturnType = PsiImplUtil.normalizeWildcardTypeByPosition(psiSubstitutor.substitute(referencedMethodReturnType), + myExpression); + constraints.add(new TypeCompatibilityConstraint(returnType, session.substituteWithInferenceVariables(capturedReturnType))); } return true; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/CapturedReturnTypeOfMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/CapturedReturnTypeOfMethodReference.java new file mode 100644 index 000000000000..07a5f983c973 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/CapturedReturnTypeOfMethodReference.java @@ -0,0 +1,12 @@ +import java.util.stream.Stream; +class Test { + + void foo(final Stream> inStream){ + inStream.map(StubElement::getPsi) + .map(s -> s.length()); + } + + class StubElement { + T getPsi() {return null;} + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java index d259853e70d1..55b0e84a3fa0 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java @@ -426,6 +426,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testCapturedReturnTypeOfMethodReference() throws Exception { + doTest(); + } + private void doTest() { doTest(false); }