// TARGET_BACKEND: JVM import java.util.IdentityHashMap import kotlin.reflect.KProperty class A { var foo: Int by IntHandler companion object { var bar: Any? by AnyHandler } } val baz: String by StringHandler val metadatas = IdentityHashMap, Unit>() fun record(p: KProperty<*>) = metadatas.put(p, Unit) object IntHandler { operator fun getValue(t: Any?, p: KProperty<*>): Int { record(p); return 42 } operator fun setValue(t: Any?, p: KProperty<*>, value: Int) { record(p) } } object AnyHandler { operator fun getValue(t: Any?, p: KProperty<*>): Any? { record(p); return 3.14 } operator fun setValue(t: Any?, p: KProperty<*>, value: Any?) { record(p) } } object StringHandler { operator fun getValue(t: Any?, p: KProperty<*>): String { record(p); return p.name } operator fun setValue(t: Any?, p: KProperty<*>, value: String) { record(p) } } fun box(): String { val a = A() a.foo = 42 a.foo = a.foo + baz.length a.foo = 239 A.bar = baz + a.foo baz + A.bar if (metadatas.keys.size != 3) return "Fail: only three instances of KProperty should have been created\n${metadatas.keys}" return "OK" }