Detect recursive type parameter definition when checking for assignability

Fixes EA-137370 - SOE: TypeConversionUtil.isNarrowingReferenceConversionAllowed
This commit is contained in:
Tagir Valeev
2019-02-21 12:58:25 +07:00
parent 9182ce2d75
commit e72a28c3e6
5 changed files with 55 additions and 29 deletions
@@ -49,3 +49,16 @@ class TestNonNarrowingConversion<T extends Z> {
return 1;
}
}
class TestRecursiveTypeParameter {
static <<error descr="Cyclic inheritance involving 'T'"></error>T extends T> void test(T t) {
<error descr="Incompatible types. Found: 'T', required: 'java.lang.String'">String x = t;</error>
<error descr="Incompatible types. Found: 'java.lang.String', required: 'T'">t = x</error>;
}
static <<error descr="Cyclic inheritance involving 'A'"></error>A extends B, B extends A> void test(A a, B b) {
a = b;
b = a;
<error descr="Incompatible types. Found: 'A', required: 'java.lang.String'">String x = a;</error>
<error descr="Incompatible types. Found: 'java.lang.String', required: 'A'">a = x</error>;
}
}