blob: 1e2a246d5d445e082c4ee2fed73fea9f91eb284f [file]
// IGNORE_BACKEND_K1: ANY
// LANGUAGE: +ContextParameters
class A {
context(a: String)
fun test1(): String {
return "A.test1 "
}
fun String.test2(): String {
return "A.test2 "
}
fun test3(): String {
return "A.test3 "
}
fun OnlyDispatch.usage(): String {
return with("") { test1() } + //resolves to OnlyDispatch.test1
with("") { test2() } //resolves to A.test2
}
fun Extension.usage(): String {
return with("") { test1() } //resolves to Extension.test1
}
fun ContextReceiver.usage(): String {
return with("") { test1() } + //resolves to ContextReceiver.test1
with("") { test2() } + //resolves to A.test2
with("") { test3() } //resolves to ContextReceiver.test3
}
fun ContextWithAnotherType.usage(): String {
return with("") { test1() } //resolves to A.test1
}
}
class OnlyDispatch {
fun test1(): String {
return "OnlyDispatch.test1 "
}
fun test2(): String {
return "OnlyDispatch.test2 "
}
}
class Extension {
fun String.test1(): String {
return "Extension.test1 "
}
}
class ContextReceiver {
context(a: String)
fun test1(): String {
return "ContextReceiver.test1 "
}
context(a: String)
fun test2(): String {
return "ContextReceiver.test2 "
}
context(a: String)
fun test3(): String {
return "ContextReceiver.test3 "
}
}
class ContextWithAnotherType {
context(a: Int)
fun test1(): String {
return "ContextWithAnotherType.test1 "
}
}
fun box(): String {
var result = "OK"
with(A()) {
with(OnlyDispatch()) {
if (usage() != "OnlyDispatch.test1 A.test2 ") result = "not OK"
}
with(Extension()) {
if (usage() != "Extension.test1 ") result = "not OK"
}
with(ContextReceiver()) {
if (usage() != "ContextReceiver.test1 A.test2 ContextReceiver.test3 ") result = "not OK"
}
with(ContextWithAnotherType()) {
if (usage() != "A.test1 ") result = "not OK"
}
}
return result
}