// MODULE: base // FILE: base.kt open class X { open fun foo() = "base function" open val bar = "base property" } // MODULE: lib(base) // FILE: A.kt // VERSION: 1 open class Y: X() { override fun foo() = "overridden function" override val bar = "overridden property" } // FILE: B.kt // VERSION: 2 open class Y: X() // MODULE: mainLib(lib) // FILE: mainLib.kt class Z: Y() { override fun foo() = "primordial overridden function" override val bar = "primordial overridden property" } fun lib(): String { val y = Y() val z = Z() return when { y.foo() != "base function" -> "fail 1" y.bar != "base property" -> "fail 2" z.foo() != "primordial overridden function" -> "fail 5" z.bar != "primordial overridden property" -> "fail 6" else -> "OK" } } // MODULE: main(mainLib) // FILE: main.kt fun box(): String = lib()