diff --git a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java index 809dc516d992..59f9a19aee00 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java @@ -402,14 +402,6 @@ public class TypeConversionUtil { PsiType typeArg2 = substitutor2.substitute(typeParameter); if (typeArg1 == null || typeArg2 == null) return true; if (TypesDistinctProver.provablyDistinct(typeArg1, typeArg2, level)) return false; - - final PsiClass class1 = PsiUtil.resolveClassInType(typeArg1); - if (class1 instanceof PsiTypeParameter) { - for (PsiType type : class1.getExtendsListTypes()) { - type = substitutor1.substitute(type); - if (TypesDistinctProver.provablyDistinct(type, typeArg2) && !isAssignable(type, typeArg2)) return false; - } - } } return true; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RecursiveTypesTypeArgumentDistinction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RecursiveTypesTypeArgumentDistinction.java new file mode 100644 index 000000000000..cc64082bee11 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/RecursiveTypesTypeArgumentDistinction.java @@ -0,0 +1,11 @@ +interface A<K> {} + +abstract class B implements A {} + +abstract class C> { + void m(V v){ + C c = (C) this; + System.out.println(c); + System.out.println(v); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index 7dc57259de9e..e7869fa150b9 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -567,6 +567,10 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } + public void testRecursiveTypesTypeArgumentDistinction() throws Exception { + doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, true); + } + public void testLeastUpperBoundWithRecursiveTypes() throws Exception { final PsiManager manager = getPsiManager(); final GlobalSearchScope scope = GlobalSearchScope.allScope(getProject());