diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt index 4b0a0fde215..becf20597ee 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt @@ -19,7 +19,6 @@ package kotlin.reflect.jvm.internal import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil import java.lang.reflect.Field -import kotlin.reflect.KProperty import kotlin.reflect.jvm.internal.JvmPropertySignature.JavaField import kotlin.reflect.jvm.internal.JvmPropertySignature.KotlinProperty @@ -40,11 +39,13 @@ internal abstract class DescriptorBasedProperty protected constructor( descriptor ) - override val descriptor: PropertyDescriptor by ReflectProperties.lazySoft(descriptorInitialValue) { + private val descriptor_ = ReflectProperties.lazySoft(descriptorInitialValue) { container.findPropertyDescriptor(name, signature) } - val javaField: Field? by ReflectProperties.lazySoft { + override val descriptor: PropertyDescriptor get() = descriptor_() + + private val javaField_ = ReflectProperties.lazySoft { val jvmSignature = RuntimeTypeMapper.mapPropertySignature(descriptor) when (jvmSignature) { is KotlinProperty -> { @@ -56,6 +57,9 @@ internal abstract class DescriptorBasedProperty protected constructor( } } + // Used in subclasses as an implementation of an irrelevant property from KPropertyImpl + val javaField: Field? get() = javaField_() + override fun equals(other: Any?): Boolean { val that = other.asKPropertyImpl() ?: return false return container == that.container && name == that.name && signature == that.signature diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty0Impl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty0Impl.kt index 4b7a283c63d..0370d047491 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty0Impl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty0Impl.kt @@ -25,7 +25,9 @@ internal open class KProperty0Impl : DescriptorBasedProperty, KPropert constructor(container: KDeclarationContainerImpl, name: String, signature: String) : super(container, name, signature) - override val getter by ReflectProperties.lazy { Getter(this) } + private val getter_ = ReflectProperties.lazy { Getter(this) } + + override val getter: Getter get() = getter_() override fun get(): R = getter.call() @@ -39,7 +41,9 @@ internal open class KMutableProperty0Impl : KProperty0Impl, KMutableProper constructor(container: KDeclarationContainerImpl, name: String, signature: String) : super(container, name, signature) - override val setter by ReflectProperties.lazy { Setter(this) } + private val setter_ = ReflectProperties.lazy { Setter(this) } + + override val setter: Setter get() = setter_() override fun set(value: R) = setter.call(value) diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty1Impl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty1Impl.kt index 74c4d63b7a4..1a363f0ad6b 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty1Impl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty1Impl.kt @@ -25,7 +25,9 @@ internal open class KProperty1Impl : DescriptorBasedProperty, KProp constructor(container: KDeclarationContainerImpl, descriptor: PropertyDescriptor) : super(container, descriptor) - override val getter by ReflectProperties.lazy { Getter(this) } + private val getter_ = ReflectProperties.lazy { Getter(this) } + + override val getter: Getter get() = getter_() override fun get(receiver: T): R = getter.call(receiver) @@ -39,7 +41,9 @@ internal open class KMutableProperty1Impl : KProperty1Impl, KMutable constructor(container: KDeclarationContainerImpl, descriptor: PropertyDescriptor) : super(container, descriptor) - override val setter by ReflectProperties.lazy { Setter(this) } + private val setter_ = ReflectProperties.lazy { Setter(this) } + + override val setter: Setter get() = setter_() override fun set(receiver: T, value: R) = setter.call(receiver, value) diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty2Impl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty2Impl.kt index a3755ca168d..8c190b87d28 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty2Impl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KProperty2Impl.kt @@ -25,7 +25,9 @@ internal open class KProperty2Impl : DescriptorBasedProperty, KP constructor(container: KDeclarationContainerImpl, descriptor: PropertyDescriptor) : super(container, descriptor) - override val getter by ReflectProperties.lazy { Getter(this) } + private val getter_ = ReflectProperties.lazy { Getter(this) } + + override val getter: Getter get() = getter_() override fun get(receiver1: D, receiver2: E): R = getter.call(receiver1, receiver2) @@ -39,7 +41,9 @@ internal open class KMutableProperty2Impl : KProperty2Impl, KM constructor(container: KDeclarationContainerImpl, descriptor: PropertyDescriptor) : super(container, descriptor) - override val setter by ReflectProperties.lazy { Setter(this) } + private val setter_ = ReflectProperties.lazy { Setter(this) } + + override val setter: Setter get() = setter_() override fun set(receiver1: D, receiver2: E, value: R) = setter.call(receiver1, receiver2, value)