Don't approximate captured types while substitute them in upper bound position

This commit is contained in:
Victor Petukhov
2021-07-07 14:01:26 +03:00
parent c2cf2f36cd
commit 3b16865152
4 changed files with 33 additions and 14 deletions
@@ -12,15 +12,15 @@ class A<T> {
}
fun foo2(a: A<out CharSequence>, b: A<in CharSequence>) {
a.foo1(Out<CharSequence>())
a.foo1<Out<CharSequence>>(Out())
a.foo1(<!TYPE_MISMATCH!>Out<CharSequence>()<!>)
a.foo1<<!UPPER_BOUND_VIOLATED!>Out<CharSequence><!>>(Out())
a.foo1(Out())
a.foo1(Out<Nothing>())
a.foo2(Inv())
a.foo2(Inv<CharSequence>())
a.foo2<Inv<CharSequence>>(Inv())
a.foo2(<!TYPE_MISMATCH!>Inv<CharSequence>()<!>)
a.foo2<<!UPPER_BOUND_VIOLATED!>Inv<CharSequence><!>>(<!TYPE_MISMATCH!>Inv()<!>)
a.foo3(In())
a.foo3(In<CharSequence>())
@@ -31,12 +31,12 @@ fun foo2(a: A<out CharSequence>, b: A<in CharSequence>) {
b.foo1<Out<CharSequence>>(Out())
b.foo2(Inv())
b.foo2(Inv<CharSequence>())
b.foo2<Inv<CharSequence>>(Inv())
b.foo2(<!TYPE_MISMATCH!>Inv<CharSequence>()<!>)
b.foo2<<!UPPER_BOUND_VIOLATED!>Inv<CharSequence><!>>(<!TYPE_MISMATCH!>Inv()<!>)
b.foo3(In<CharSequence>())
b.foo3<In<CharSequence>>(In())
b.foo3(<!TYPE_MISMATCH!>In<CharSequence>()<!>)
b.foo3<<!UPPER_BOUND_VIOLATED!>In<CharSequence><!>>(In())
b.foo3(In<Any?>())
b.foo3(In())