Support property delegation to inline class values (KT-27070)
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// FILE: Foo.kt
|
||||
class Foo {
|
||||
var a: Int = 42
|
||||
var d by DelegateFactory(0)
|
||||
}
|
||||
|
||||
// FILE: delegates.kt
|
||||
inline class DelegateFactory(val default: Int) {
|
||||
operator fun provideDelegate(thisRef: Any?, prop: Any?) = Delegate(default)
|
||||
}
|
||||
|
||||
inline class Delegate(val default: Int) {
|
||||
|
||||
operator fun getValue(thisRef: Any?, prop: Any?) =
|
||||
(thisRef as? Foo)?.a ?: default
|
||||
|
||||
operator fun setValue(thisRef: Any?, prop: Any?, newValue: Int) {
|
||||
if (thisRef is Foo) {
|
||||
thisRef.a = newValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// @Foo.class:
|
||||
// 0 DelegateFactory\.box
|
||||
// 0 DelegateFactory\.unbox
|
||||
// 0 Delegate\.box
|
||||
// 0 Delegate\.unbox
|
||||
// 1 INVOKESTATIC DelegateFactory\.provideDelegate-impl \(ILjava/lang/Object;Ljava/lang/Object;\)I
|
||||
// 1 INVOKESTATIC Delegate\.getValue-impl \(ILjava/lang/Object;Ljava/lang/Object;\)I
|
||||
// 1 INVOKESTATIC Delegate\.setValue-impl \(ILjava/lang/Object;Ljava/lang/Object;I\)V
|
||||
Reference in New Issue
Block a user