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());