diff --git a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KExtensionPropertyImpl.kt b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KExtensionPropertyImpl.kt index c39464c9b32..50406e2c72e 100644 --- a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KExtensionPropertyImpl.kt +++ b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KExtensionPropertyImpl.kt @@ -16,15 +16,17 @@ package kotlin.reflect.jvm.internal -import java.lang.reflect.Method +import java.lang.reflect.* open class KExtensionPropertyImpl( public override val name: String, protected val owner: KPackageImpl, protected val receiverClass: Class ) : KExtensionProperty, KPropertyImpl { + override val field: Field? get() = null + // TODO: extract, make lazy (weak?), use our descriptors knowledge, support Java fields - val getter: Method = owner.jClass.getMethod(getterName(name), receiverClass) + override val getter: Method = owner.jClass.getMethod(getterName(name), receiverClass) override fun get(receiver: T): R { return getter(null, receiver) as R @@ -36,7 +38,7 @@ class KMutableExtensionPropertyImpl( owner: KPackageImpl, receiverClass: Class ) : KMutableExtensionProperty, KMutablePropertyImpl, KExtensionPropertyImpl(name, owner, receiverClass) { - val setter = owner.jClass.getMethod(setterName(name), receiverClass, getter.getReturnType()!!) + override val setter: Method = owner.jClass.getMethod(setterName(name), receiverClass, getter.getReturnType()!!) override fun set(receiver: T, value: R) { setter.invoke(null, receiver, value) diff --git a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KMemberPropertyImpl.kt b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KMemberPropertyImpl.kt index 0f3d18d96e9..6df4129886a 100644 --- a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KMemberPropertyImpl.kt +++ b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KMemberPropertyImpl.kt @@ -16,21 +16,20 @@ package kotlin.reflect.jvm.internal -import java.lang.reflect.Field -import java.lang.reflect.Method +import java.lang.reflect.* open class KMemberPropertyImpl( public override val name: String, protected val owner: KClassImpl ) : KMemberProperty, KPropertyImpl { - val field: Field? = + override val field: Field? = if (owner.origin == KClassOrigin.FOREIGN) { owner.jClass.getField(name) } else null // TODO: extract, make lazy (weak?), use our descriptors knowledge - val getter: Method? = + override val getter: Method? = if (owner.origin == KClassOrigin.KOTLIN) { owner.jClass.getMaybeDeclaredMethod(getterName(name)) } @@ -49,7 +48,7 @@ class KMutableMemberPropertyImpl( name: String, owner: KClassImpl ) : KMutableMemberProperty, KMutablePropertyImpl, KMemberPropertyImpl(name, owner) { - val setter: Method? = + override val setter: Method? = if (owner.origin == KClassOrigin.KOTLIN) { owner.jClass.getMaybeDeclaredMethod(setterName(name), getter!!.getReturnType()!!) } diff --git a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt index f4cbba5ff10..335a159eeb5 100644 --- a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt +++ b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt @@ -19,9 +19,12 @@ package kotlin.reflect.jvm.internal import java.lang.reflect.* trait KPropertyImpl : KProperty, KCallableImpl { + val field: Field? + val getter: Method? } trait KMutablePropertyImpl : KMutableProperty, KPropertyImpl { + val setter: Method? } diff --git a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KTopLevelPropertyImpl.kt b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KTopLevelPropertyImpl.kt index 6ae1177d3ed..a95bed1131f 100644 --- a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KTopLevelPropertyImpl.kt +++ b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KTopLevelPropertyImpl.kt @@ -16,14 +16,17 @@ package kotlin.reflect.jvm.internal -import java.lang.reflect.Method +import java.lang.reflect.* open class KTopLevelPropertyImpl( public override val name: String, protected val owner: KPackageImpl ) : KTopLevelProperty, KVariableImpl { + // TODO: load the field from the corresponding package part + override val field: Field? get() = null + // TODO: extract, make lazy (weak?), use our descriptors knowledge, support Java fields - val getter: Method = owner.jClass.getMethod(getterName(name)) + override val getter: Method = owner.jClass.getMethod(getterName(name)) override fun get(): R { return getter(null) as R @@ -34,7 +37,7 @@ class KMutableTopLevelPropertyImpl( name: String, owner: KPackageImpl ) : KMutableTopLevelProperty, KMutableVariableImpl, KTopLevelPropertyImpl(name, owner) { - val setter = owner.jClass.getMethod(setterName(name), getter.getReturnType()!!) + override val setter: Method = owner.jClass.getMethod(setterName(name), getter.getReturnType()!!) override fun set(value: R) { setter.invoke(null, value)