04c5bbdcf8
Generate $delegate method as instance method in PropertyReferenceDelegationLowering, and remove dispatch receiver later in MakePropertyDelegateMethodsStatic. The method needs to be static to be non-overridable (see delegateMethodIsNonOverridable.kt), and public to be accessible in reflection. Otherwise we generated incorrect IR where a static function accessed an instance field of the containing class, which failed in multiple places including LocalDeclarationsLowering. #KT-48350 Fixed
23 lines
263 B
Kotlin
Vendored
23 lines
263 B
Kotlin
Vendored
// WITH_RUNTIME
|
|
|
|
interface I {
|
|
var z: String
|
|
}
|
|
|
|
class X {
|
|
var p: String = "Fail"
|
|
}
|
|
|
|
class A {
|
|
val x = X()
|
|
|
|
val y = object : I {
|
|
override var z: String by x::p
|
|
}
|
|
}
|
|
|
|
fun box(): String {
|
|
val a = A()
|
|
a.y.z = "OK"
|
|
return a.y.z
|
|
} |