| // TARGET_BACKEND: JVM | |
| // LANGUAGE: +ContextParameters | |
| // WITH_STDLIB | |
| // ISSUE: KT-76588 | |
| open class ParentA { | |
| fun testA(x: String): String = "testA" | |
| } | |
| class ChildA: ParentA() { | |
| @JvmName("ctxTestA") | |
| context(_: String) fun testA(): String = "ctxTestA" | |
| } | |
| interface ParentB { | |
| fun testB(x: String): String = "testB" | |
| } | |
| class ChildB: ParentB { | |
| @JvmName("ctxTestB") | |
| context(_: String) fun testB(): String = "ctxTestB" | |
| } | |
| interface ParentC { | |
| fun testC(x: String): String | |
| } | |
| class ChildC: ParentC { | |
| override fun testC(x: String): String = "testC" | |
| @JvmName("ctxTestC") | |
| context(_: String) fun testC(): String = "ctxTestC" | |
| } | |
| class ChildD { | |
| @JvmName("ctxTestD") | |
| context(_: String) fun testD(): String = "ctxTestD" | |
| } | |
| fun box(): String { | |
| ChildA().testA("").let { result -> if (result != "testA") return "NOT OK: testA() == $result" } | |
| ChildB().testB("").let { result -> if (result != "testB") return "NOT OK: testB() == $result" } | |
| ChildC().testC("").let { result -> if (result != "testC") return "NOT OK: testC() == $result" } | |
| with("") { | |
| ChildA().testA().let { result -> if (result != "ctxTestA") return "NOT OK: ctxTestA() == $result" } | |
| ChildB().testB().let { result -> if (result != "ctxTestB") return "NOT OK: ctxTestB() == $result" } | |
| ChildC().testC().let { result -> if (result != "ctxTestC") return "NOT OK: ctxTestC() == $result" } | |
| ChildD().testD().let { result -> if (result != "ctxTestD") return "NOT OK: ctxTestD() == $result" } | |
| } | |
| return "OK" | |
| } |