KT-1457 Subtyping doesn't work when type parameter is used indirectly in supertype declaration

This commit is contained in:
Andrey Breslav
2012-02-27 15:34:57 +04:00
parent 2e0d00c45b
commit 963557f3c8
3 changed files with 79 additions and 2 deletions
@@ -471,6 +471,21 @@ public class JetTypeCheckerTest extends JetLiteFixture {
assertSupertypes("Derived1_inT<Int>", "Derived_T<Int>", "Base_T<Int>", "Any", "Base_inT<Int>");
}
public void testEffectiveProjectionKinds() throws Exception {
assertSubtype("Tuple1<Int>", "Tuple1<Int>");
assertSubtype("Tuple1<out Int>", "Tuple1<out Int>");
assertSubtype("Tuple1<out Int>", "Tuple1<Int>");
assertSubtype("Tuple1<Int>", "Tuple1<out Int>");
assertSubtype("Tuple1<in Int>", "Tuple1<out Any?>");
assertSubtype("Tuple1<out Any?>", "Tuple1<in String>");
assertSubtype("Base_inT<Int>", "Base_inT<Int>");
assertSubtype("Base_inT<in Int>", "Base_inT<in Int>");
assertSubtype("Base_inT<in Int>", "Base_inT<Int>");
assertSubtype("Base_inT<Int>", "Base_inT<in Int>");
assertSubtype("Base_inT<out Int>", "Base_inT<out Any?>");
assertSubtype("Base_inT<out Any?>", "Base_inT<out Int>");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void assertSupertypes(String typeStr, String... supertypeStrs) {