| import kotlin.reflect.KProperty |
| |
| class Delegate<T>(var inner: T) { |
| operator fun getValue(t: Any?, p: KProperty<*>): T = inner |
| operator fun setValue(t: Any?, p: KProperty<*>, i: T) { inner = i } |
| } |
| |
| |
| class Foo (val f: Int) { |
| companion object { |
| val A: Foo by Delegate(Foo(11)) |
| var B: Foo by Delegate(Foo(11)) |
| } |
| } |
| |
| interface FooTrait { |
| companion object { |
| val A: Foo by Delegate(Foo(11)) |
| var B: Foo by Delegate(Foo(11)) |
| } |
| } |
| |
| fun box() : String { |
| if (Foo.A.f != 11) return "fail 1" |
| if (Foo.B.f != 11) return "fail 2" |
| |
| Foo.B = Foo(12) |
| if (Foo.B.f != 12) return "fail 3" |
| |
| if (FooTrait.A.f != 11) return "fail 4" |
| if (FooTrait.B.f != 11) return "fail 5" |
| |
| FooTrait.B = Foo(12) |
| if (FooTrait.B.f != 12) return "fail 6" |
| |
| return "OK" |
| } |