FILE: B.kt public final class B : R|A| { public constructor(): R|B| { super() } protected open override infix fun foo(s: R|kotlin/String|): R|kotlin/String| { ^foo String() } public final fun testProtected(): R|kotlin/String| { ^testProtected this@R|/B|.R|/B.foo|(String(hello)) } } FILE: A.kt public abstract class A : R|kotlin/Any| { public constructor(): R|A| { super() } protected abstract infix fun foo(s: R|kotlin/String|): R|kotlin/String| } FILE: main.kt public final fun test(b: R|B|): R|kotlin/String| { ^test R|/b|.R|/B.foo#|(String(hello)) }