// !LANGUAGE: +MultiPlatformProjects // MODULE: m1-common // FILE: common.kt expect open class A() { open fun foo(arg: T) } open class B : A() { // Fake: override fun foo(arg: String) = super.foo(arg) // Fake (JVM only): override fun bar(arg: String): String = super.bar(arg) } open class C : B() { open fun bar(arg: String): String = arg open fun baz(arg: CharSequence): String = arg.toString() } // MODULE: m1-jvm()()(m1-common) // FILE: jvm.kt actual open class A { actual open fun foo(arg: T) {} open fun bar(arg: T): T = arg open fun baz(arg: T): T = arg } class D : C() { fun test() { foo("") bar("") // should be resolved to just C.bar baz("") } }