Rename internal field/getter/setter properties in KPropertyImpl
To avoid clash with getter/setter which will appear soon in KProperty interface
This commit is contained in:
@@ -66,21 +66,21 @@ abstract class DescriptorBasedProperty protected constructor(
|
||||
null
|
||||
}
|
||||
|
||||
open val field: Field? by ReflectProperties.lazySoft {
|
||||
open val javaField: Field? by ReflectProperties.lazySoft {
|
||||
val proto = protoData
|
||||
if (proto == null) container.jClass.getField(name)
|
||||
else if (!proto.signature.hasField()) null
|
||||
else container.findFieldBySignature(proto.proto, proto.signature.getField(), proto.nameResolver)
|
||||
}
|
||||
|
||||
open val getter: Method? by ReflectProperties.lazySoft {
|
||||
open val javaGetter: Method? by ReflectProperties.lazySoft {
|
||||
val proto = protoData
|
||||
if (proto == null || !proto.signature.hasGetter()) null
|
||||
else container.findMethodBySignature(proto.signature.getGetter(), proto.nameResolver,
|
||||
descriptor.getGetter()?.getVisibility()?.let { Visibilities.isPrivate(it) } ?: false)
|
||||
}
|
||||
|
||||
open val setter: Method? by ReflectProperties.lazySoft {
|
||||
open val javaSetter: Method? by ReflectProperties.lazySoft {
|
||||
val proto = protoData
|
||||
if (proto == null || !proto.signature.hasSetter()) null
|
||||
else container.findMethodBySignature(proto.signature.getSetter(), proto.nameResolver,
|
||||
|
||||
@@ -28,12 +28,12 @@ open class KProperty0Impl<out R> : DescriptorBasedProperty, KProperty0<R>, KProp
|
||||
|
||||
override val name: String get() = descriptor.getName().asString()
|
||||
|
||||
override val getter: Method get() = super<DescriptorBasedProperty>.getter!!
|
||||
override val javaGetter: Method get() = super.javaGetter!!
|
||||
|
||||
override fun get(): R {
|
||||
try {
|
||||
@suppress("UNCHECKED_CAST")
|
||||
return getter.invoke(null) as R
|
||||
return javaGetter.invoke(null) as R
|
||||
}
|
||||
catch (e: IllegalAccessException) {
|
||||
throw IllegalPropertyAccessException(e)
|
||||
@@ -44,11 +44,11 @@ open class KProperty0Impl<out R> : DescriptorBasedProperty, KProperty0<R>, KProp
|
||||
open class KMutableProperty0Impl<R> : KProperty0Impl<R>, KMutableProperty0<R>, KMutablePropertyImpl<R> {
|
||||
constructor(container: KCallableContainerImpl, name: String, signature: String) : super(container, name, signature)
|
||||
|
||||
override val setter: Method get() = super<KProperty0Impl>.setter!!
|
||||
override val javaSetter: Method get() = super.javaSetter!!
|
||||
|
||||
override fun set(value: R) {
|
||||
try {
|
||||
setter.invoke(null, value)
|
||||
javaSetter.invoke(null, value)
|
||||
}
|
||||
catch (e: IllegalAccessException) {
|
||||
throw IllegalPropertyAccessException(e)
|
||||
|
||||
@@ -35,8 +35,8 @@ open class KProperty1Impl<T, out R> : DescriptorBasedProperty, KProperty1<T, R>,
|
||||
@suppress("UNCHECKED_CAST")
|
||||
override fun get(receiver: T): R {
|
||||
try {
|
||||
val getter = getter ?:
|
||||
return field!!.get(receiver) as R
|
||||
val getter = javaGetter ?:
|
||||
return javaField!!.get(receiver) as R
|
||||
|
||||
if (Modifier.isStatic(getter.getModifiers())) {
|
||||
// Workaround the case of platformStatic property in object, getter of which doesn't take a receiver
|
||||
@@ -63,8 +63,8 @@ open class KMutableProperty1Impl<T, R> : KProperty1Impl<T, R>, KMutableProperty1
|
||||
|
||||
override fun set(receiver: T, value: R) {
|
||||
try {
|
||||
val setter = setter ?:
|
||||
return field!!.set(receiver, value)
|
||||
val setter = javaSetter ?:
|
||||
return javaField!!.set(receiver, value)
|
||||
|
||||
if (Modifier.isStatic(setter.getModifiers())) {
|
||||
// Workaround the case of platformStatic property in object, setter of which doesn't take a receiver
|
||||
|
||||
@@ -30,14 +30,14 @@ open class KProperty2Impl<D, E, out R> : DescriptorBasedProperty, KProperty2<D,
|
||||
|
||||
override val name: String get() = descriptor.getName().asString()
|
||||
|
||||
override val getter: Method get() = super<DescriptorBasedProperty>.getter!!
|
||||
override val javaGetter: Method get() = super.javaGetter!!
|
||||
|
||||
override val field: Field? get() = null
|
||||
override val javaField: Field? get() = null
|
||||
|
||||
override fun get(receiver1: D, receiver2: E): R {
|
||||
try {
|
||||
@suppress("UNCHECKED_CAST")
|
||||
return getter.invoke(receiver1, receiver2) as R
|
||||
return javaGetter.invoke(receiver1, receiver2) as R
|
||||
}
|
||||
catch (e: IllegalAccessException) {
|
||||
throw IllegalPropertyAccessException(e)
|
||||
@@ -51,11 +51,11 @@ class KMutableProperty2Impl<D, E, R> : KProperty2Impl<D, E, R>, KMutableProperty
|
||||
|
||||
constructor(container: KClassImpl<D>, descriptor: PropertyDescriptor) : super(container, descriptor)
|
||||
|
||||
override val setter: Method get() = super<KProperty2Impl>.setter!!
|
||||
override val javaSetter: Method get() = super.javaSetter!!
|
||||
|
||||
override fun set(receiver1: D, receiver2: E, value: R) {
|
||||
try {
|
||||
setter.invoke(receiver1, receiver2, value)
|
||||
javaSetter.invoke(receiver1, receiver2, value)
|
||||
}
|
||||
catch (e: IllegalAccessException) {
|
||||
throw IllegalPropertyAccessException(e)
|
||||
|
||||
@@ -20,12 +20,12 @@ import java.lang.reflect.*
|
||||
import kotlin.reflect.*
|
||||
|
||||
interface KPropertyImpl<out R> : KProperty<R>, KCallableImpl<R> {
|
||||
val field: Field?
|
||||
val javaField: Field?
|
||||
|
||||
val getter: Method?
|
||||
val javaGetter: Method?
|
||||
}
|
||||
|
||||
|
||||
interface KMutablePropertyImpl<R> : KMutableProperty<R>, KPropertyImpl<R> {
|
||||
val setter: Method?
|
||||
val javaSetter: Method?
|
||||
}
|
||||
|
||||
@@ -46,21 +46,21 @@ public val KPackage.javaFacade: Class<*>
|
||||
* or `null` if the property has no backing field.
|
||||
*/
|
||||
public val KProperty<*>.javaField: Field?
|
||||
get() = (this as KPropertyImpl<*>).field
|
||||
get() = (this as KPropertyImpl<*>).javaField
|
||||
|
||||
/**
|
||||
* Returns a Java [Method] instance corresponding to the getter of the given property,
|
||||
* or `null` if the property has no getter, for example in case of a simple private `val` in a class.
|
||||
*/
|
||||
public val KProperty<*>.javaGetter: Method?
|
||||
get() = (this as? KPropertyImpl<*>)?.getter
|
||||
get() = (this as? KPropertyImpl<*>)?.javaGetter
|
||||
|
||||
/**
|
||||
* Returns a Java [Method] instance corresponding to the setter of the given mutable property,
|
||||
* or `null` if the property has no setter, for example in case of a simple private `var` in a class.
|
||||
*/
|
||||
public val KMutableProperty<*>.javaSetter: Method?
|
||||
get() = (this as? KMutablePropertyImpl<*>)?.setter
|
||||
get() = (this as? KMutablePropertyImpl<*>)?.javaSetter
|
||||
|
||||
|
||||
|
||||
@@ -99,6 +99,6 @@ public val Field.kotlin: KProperty<*>?
|
||||
|
||||
// TODO: optimize (search by name)
|
||||
return clazz.properties.firstOrNull { p: KProperty<*> ->
|
||||
(p as KPropertyImpl<*>).field == this
|
||||
(p as KPropertyImpl<*>).javaField == this
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,12 +35,12 @@ public var <R> KProperty<R>.accessible: Boolean
|
||||
get() {
|
||||
return when (this) {
|
||||
is KMutableProperty1Impl<*, R> ->
|
||||
field?.isAccessible() ?: true &&
|
||||
getter?.isAccessible() ?: true &&
|
||||
setter?.isAccessible() ?: true
|
||||
javaField?.isAccessible() ?: true &&
|
||||
javaGetter?.isAccessible() ?: true &&
|
||||
javaSetter?.isAccessible() ?: true
|
||||
is KProperty1Impl<*, R> ->
|
||||
field?.isAccessible() ?: true &&
|
||||
getter?.isAccessible() ?: true
|
||||
javaField?.isAccessible() ?: true &&
|
||||
javaGetter?.isAccessible() ?: true
|
||||
else -> {
|
||||
// Non-member properties always have public visibility on JVM, thus accessible has no effect on them
|
||||
true
|
||||
@@ -50,13 +50,13 @@ public var <R> KProperty<R>.accessible: Boolean
|
||||
set(value) {
|
||||
when (this) {
|
||||
is KMutableProperty1Impl<*, R> -> {
|
||||
field?.setAccessible(value)
|
||||
getter?.setAccessible(value)
|
||||
setter?.setAccessible(value)
|
||||
javaField?.setAccessible(value)
|
||||
javaGetter?.setAccessible(value)
|
||||
javaSetter?.setAccessible(value)
|
||||
}
|
||||
is KProperty1Impl<*, R> -> {
|
||||
field?.setAccessible(value)
|
||||
getter?.setAccessible(value)
|
||||
javaField?.setAccessible(value)
|
||||
javaGetter?.setAccessible(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user