blob: d81698affdc0f9879fb23a54a42c3027daec3ee1 [file]
// IGNORE_BACKEND_K1: ANY
// ISSUE: KT-73779
// LANGUAGE: +ContextParameters
fun <A, R> context(context: A, block: context(A) () -> R): R = block(context)
class A(val a: String = "d ") {
context(a: A)
fun A.funMember(): String {
return a.a + this@A.a + this.a
}
context(a: A)
val A.propertyMember: String
get() = a.a + this@A.a + this.a
fun simpleUsageInsideClass(): String {
return funMember() + propertyMember
}
fun usageWithThisInsideClass(): String {
return this.funMember() + this.propertyMember
}
fun usageWithExtensionInsideClass(): String {
return A("e ").funMember() + A("e ").propertyMember
}
fun usageWithContextAndExtensionInsideClass(): String {
var temp = ""
context(A("c ")) {
@Suppress("RECEIVER_SHADOWED_BY_CONTEXT_PARAMETER")
temp = A("e ").funMember() + A("e ").propertyMember
}
return temp
}
}
fun simpleUsageOutsideClass(): String {
with(A("d ")) {
return funMember() + propertyMember
}
}
fun usageWithExtensionOutsideClass(): String {
with(A("d ")) {
return A("e ").funMember() + A("e ").propertyMember
}
}
fun usageWithExtensionAndContextOutsideClass(): String {
var temp = ""
with(A("d ")) {
context(A("c ")) {
temp = (@Suppress("RECEIVER_SHADOWED_BY_CONTEXT_PARAMETER") A("e ").funMember()) + (@Suppress("RECEIVER_SHADOWED_BY_CONTEXT_PARAMETER") A("e ").propertyMember)
}
}
return temp
}
fun box(): String {
return if (
(A().simpleUsageInsideClass() == "d d d d d d ") &&
(A().usageWithThisInsideClass() == "d d d d d d ") &&
(A().usageWithExtensionInsideClass() == "d d e d d e ") &&
(A().usageWithContextAndExtensionInsideClass() == "c d e c d e ") &&
(simpleUsageOutsideClass() == "d d d d d d ") &&
(usageWithExtensionOutsideClass() == "d d e d d e ") &&
(usageWithExtensionAndContextOutsideClass() == "c d e c d e ")
) "OK" else "NOK"
}