diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java index 7324818c4351..db193ddda9eb 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java @@ -19,6 +19,7 @@ import com.intellij.psi.*; import com.intellij.psi.impl.source.resolve.graphInference.InferenceBound; import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession; import com.intellij.psi.impl.source.resolve.graphInference.InferenceVariable; +import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.TypeConversionUtil; import java.util.List; @@ -94,6 +95,9 @@ public class StrictSubtypingConstraint implements ConstraintFormula { if (!(myS instanceof PsiClassType)) return false; PsiClassType.ClassResolveResult SResult = ((PsiClassType)myS).resolveGenerics(); PsiClass SClass = SResult.getElement(); + if (((PsiClassType)myT).isRaw()) { + return SClass != null && InheritanceUtil.isInheritorOrSelf(SClass, CClass, true); + } final PsiSubstitutor tSubstitutor = TResult.getSubstitutor(); final PsiSubstitutor sSubstitutor = SClass != null ? TypeConversionUtil.getClassSubstitutor(CClass, SClass, SResult.getSubstitutor()) : null; if (sSubstitutor != null) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/RawTargetType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/RawTargetType.java new file mode 100644 index 000000000000..880d654e1659 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/RawTargetType.java @@ -0,0 +1,15 @@ +import java.util.Map; +import java.util.TreeMap; +import java.util.function.Supplier; + +class Test { + interface I {} + + { + I i = foo(TreeMap::new); + } + + > I foo(Supplier mapFactory) { + 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 8386a4c327b9..e944269c098b 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 @@ -169,6 +169,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testRawTargetType() throws Exception { + doTest(); + } + private void doTest() { doTest(false); }