| // MODULE: base |
| // FILE: base.kt |
| |
| open class X { |
| open val bar: String |
| get() = "base class open" |
| val zon: String |
| get() = "base class" |
| } |
| |
| interface Y { |
| val qux: String |
| get() = "base interface Y" |
| } |
| |
| interface Z { |
| val sep: String |
| get() = "base interface Z" |
| } |
| |
| // MODULE: lib(base) |
| // FILE: A.kt |
| // VERSION: 1 |
| |
| class W : Y, Z, X() { |
| override val bar: String |
| get() = "from base class" |
| override val qux: String |
| get() = "from interface Y" |
| override val sep: String |
| get() = "from interface Z" |
| } |
| |
| // FILE: B.kt |
| // VERSION: 2 |
| |
| class W : X(), Z, Y { |
| override val bar: String |
| get() = "from base class" |
| override val qux: String |
| get() = "from interface Y" |
| override val sep: String |
| get() = "from interface Z" |
| } |
| |
| // MODULE: mainLib(lib) |
| // FILE: mainLib.kt |
| |
| fun lib(): String { |
| val w = W() |
| return when { |
| w.bar != "from base class" -> "fail 1" |
| w.zon != "base class" -> "fail 2" |
| w.qux != "from interface Y" -> "fail 3" |
| w.sep != "from interface Z" -> "fail 4" |
| else -> "OK" |
| } |
| } |
| |
| // MODULE: main(mainLib) |
| // FILE: main.kt |
| fun box(): String = lib() |
| |