Module: m1-common FILE: common.kt public open expect class A : R|kotlin/Any| { public expect constructor(): R|A| public open expect fun foo(arg: R|T|): R|kotlin/Unit| } public open class B : R|A| { public constructor(): R|B| { super|>() } } public open class C : R|B| { public constructor(): R|C| { super() } public open fun bar(arg: R|kotlin/String|): R|kotlin/String| { ^bar R|/arg| } public open fun baz(arg: R|kotlin/CharSequence|): R|kotlin/String| { ^baz R|/arg|.R|kotlin/Any.toString|() } } FILE: jvm.kt public open actual class A : R|kotlin/Any| { public constructor(): R|A| { super() } public open actual fun foo(arg: R|T|): R|kotlin/Unit| { } public open fun bar(arg: R|T|): R|T| { ^bar R|/arg| } public open fun baz(arg: R|T|): R|T| { ^baz R|/arg| } } public final class D : R|C| { public constructor(): R|D| { super() } public final fun test(): R|kotlin/Unit| { this@R|/D|.R|SubstitutionOverride|(String()) this@R|/D|.R|/C.bar|(String()) this@R|/D|.R|SubstitutionOverride|(String()) } } Module: m1-jvm FILE: common.kt public open expect class A : R|kotlin/Any| { public expect constructor(): R|A| public open expect fun foo(arg: R|T|): R|kotlin/Unit| } public open class B : R|A| { public constructor(): R|B| { super|>() } } public open class C : R|B| { public constructor(): R|C| { super() } public open fun bar(arg: R|kotlin/String|): R|kotlin/String| { ^bar R|/arg| } public open fun baz(arg: R|kotlin/CharSequence|): R|kotlin/String| { ^baz R|/arg|.R|kotlin/Any.toString|() } } FILE: jvm.kt public open actual class A : R|kotlin/Any| { public constructor(): R|A| { super() } public open actual fun foo(arg: R|T|): R|kotlin/Unit| { } public open fun bar(arg: R|T|): R|T| { ^bar R|/arg| } public open fun baz(arg: R|T|): R|T| { ^baz R|/arg| } } public final class D : R|C| { public constructor(): R|D| { super() } public final fun test(): R|kotlin/Unit| { this@R|/D|.R|SubstitutionOverride|(String()) this@R|/D|.R|/C.bar|(String()) this@R|/D|.R|SubstitutionOverride|(String()) } }