FIR: Fix incorrect handling bare types when subject is type alias

^KT-39043 Fixed
This commit is contained in:
Denis Zharkov
2020-06-11 13:25:39 +03:00
parent 063c973eaa
commit 24948a8b3f
6 changed files with 105 additions and 3 deletions
@@ -0,0 +1,14 @@
sealed class A<out T> {
class B<out T1>(val x: T1) : A<T1>()
class C<out T2>(val y: T2) : A<T2>()
}
typealias TA = A<CharSequence>
fun bar(): TA = TODO()
fun foo() {
when (val a = bar()) {
is A.B -> a.x.length
}
}
@@ -0,0 +1,39 @@
FILE: bareWithSubjectTypeAlias.kt
public sealed class A<out T> : R|kotlin/Any| {
private constructor<out T>(): R|A<T>| {
super<R|kotlin/Any|>()
}
public final class B<out T1> : R|A<T1>| {
public constructor<out T1>(x: R|T1|): R|A.B<T1>| {
super<R|A<T1>|>()
}
public final val x: R|T1| = R|<local>/x|
public get(): R|T1|
}
public final class C<out T2> : R|A<T2>| {
public constructor<out T2>(y: R|T2|): R|A.C<T2>| {
super<R|A<T2>|>()
}
public final val y: R|T2| = R|<local>/y|
public get(): R|T2|
}
}
public final typealias TA = R|A<kotlin/CharSequence>|
public final fun bar(): R|TA| {
^bar R|kotlin/TODO|()
}
public final fun foo(): R|kotlin/Unit| {
when (lval a: R|TA| = R|/bar|()) {
($subj$ is R|A.B<kotlin/CharSequence>|) -> {
R|<local>/a|.R|FakeOverride</A.B.x: R|kotlin/CharSequence|>|.R|kotlin/CharSequence.length|
}
}
}