FILE: uselessCastLeadsToRecursiveProblem.kt public abstract interface A : R|kotlin/Any| { } public final class B : R|A| { public constructor(): R|B| { super() } } public open class C : R|A| { public constructor(): R|C| { super() } } public final val R|kotlin/reflect/KClass|.extProp1: R|kotlin/String| public get(): R|kotlin/String| { ^ String(I'm C) } public final val R|A|.extProp1: R|kotlin/String| public get(): R|kotlin/String| { ^ when (this@R|/extProp1|) { ($subj$ is R|B|) -> { String(I'm B) } ($subj$ is R|C|) -> { ((this@R|/extProp1| as R|C|)).R|/extProp1| } else -> { String(I don't know who I am..) } } } public final val R|kotlin/reflect/KClass|.extProp2: R|kotlin/String| public get(): R|kotlin/String| { ^ String(I'm C) } public final val R|A|.extProp2: R|kotlin/String| public get(): R|kotlin/String| { ^ when (this@R|/extProp2|) { ($subj$ is R|B|) -> { String(I'm B) } ($subj$ is R|C|) -> { (this@R|/extProp2|).R|/extProp2| } else -> { String(I don't know who I am..) } } }