[FIR] Properly handle that type variable is contained in inv or contravar positions

#KT-45344 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-03-11 13:37:35 +03:00
committed by TeamCityServer
parent 3d1f4b8386
commit 6cc3fff48d
13 changed files with 230 additions and 46 deletions
@@ -140,8 +140,8 @@ class Main<L>(x: L?, y: L) {
val x120 = foo12(x!!)
val x121 = foo12(y!!)
val x122 = foo12(x)
val x123 = foo12(y)
val x122 = <!INAPPLICABLE_CANDIDATE!>foo12<!>(x)
val x123 = <!INAPPLICABLE_CANDIDATE!>foo12<!>(y)
val x133 = Foo13(x).foo1(y)
val x135 = Foo13(y).foo1(y)
@@ -1,24 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION -UNUSED_VARIABLE
class Inv<T>(val x: T?)
fun <K> create(y: K) = Inv(y)
fun <K> createPrivate(y: K) = Inv(y)
fun takeInvInt(i: Inv<Int>) {}
fun <S> test(i: Int, s: S) {
val a = Inv(s)
a
val b = create(i)
b
val c = createPrivate(i)
c
<!INAPPLICABLE_CANDIDATE!>takeInvInt<!>(create(i))
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION -UNUSED_VARIABLE
class Inv<T>(val x: T?)
@@ -13,4 +13,4 @@ class Foo {
operator fun setValue(thisRef: Foo, property: KProperty<*>, value: T) {}
}
}
}