Fix warnings in module 'reflection.jvm', clarify some code
This commit is contained in:
@@ -33,10 +33,10 @@ open class KMemberExtensionPropertyImpl<D : Any, E, out R>(
|
|||||||
|
|
||||||
override val field: Field? get() = null
|
override val field: Field? get() = null
|
||||||
|
|
||||||
override fun get(dispatchReceiver: D, extensionReceiver: E): R {
|
override fun get(instance: D, extensionReceiver: E): R {
|
||||||
try {
|
try {
|
||||||
[suppress("UNCHECKED_CAST")]
|
[suppress("UNCHECKED_CAST")]
|
||||||
return getter.invoke(dispatchReceiver, extensionReceiver) as R
|
return getter.invoke(instance, extensionReceiver) as R
|
||||||
}
|
}
|
||||||
catch (e: IllegalAccessException) {
|
catch (e: IllegalAccessException) {
|
||||||
throw IllegalPropertyAccessException(e)
|
throw IllegalPropertyAccessException(e)
|
||||||
@@ -60,9 +60,9 @@ class KMutableMemberExtensionPropertyImpl<D : Any, E, R>(
|
|||||||
) : KMemberExtensionPropertyImpl<D, E, R>(container, computeDescriptor), KMutableMemberExtensionProperty<D, E, R>, KMutablePropertyImpl<R> {
|
) : KMemberExtensionPropertyImpl<D, E, R>(container, computeDescriptor), KMutableMemberExtensionProperty<D, E, R>, KMutablePropertyImpl<R> {
|
||||||
override val setter: Method get() = super<KMemberExtensionPropertyImpl>.setter!!
|
override val setter: Method get() = super<KMemberExtensionPropertyImpl>.setter!!
|
||||||
|
|
||||||
override fun set(dispatchReceiver: D, extensionReceiver: E, value: R) {
|
override fun set(instance: D, extensionReceiver: E, value: R) {
|
||||||
try {
|
try {
|
||||||
setter.invoke(dispatchReceiver, extensionReceiver, value)
|
setter.invoke(instance, extensionReceiver, value)
|
||||||
}
|
}
|
||||||
catch (e: IllegalAccessException) {
|
catch (e: IllegalAccessException) {
|
||||||
throw IllegalPropertyAccessException(e)
|
throw IllegalPropertyAccessException(e)
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ open class KMemberPropertyImpl<T : Any, out R>(
|
|||||||
) : DescriptorBasedProperty(computeDescriptor), KMemberProperty<T, R>, KPropertyImpl<R> {
|
) : DescriptorBasedProperty(computeDescriptor), KMemberProperty<T, R>, KPropertyImpl<R> {
|
||||||
override val name: String get() = descriptor.getName().asString()
|
override val name: String get() = descriptor.getName().asString()
|
||||||
|
|
||||||
override fun get(receiver: T): R {
|
override fun get(instance: T): R {
|
||||||
try {
|
try {
|
||||||
val getter = getter
|
val getter = getter
|
||||||
[suppress("UNCHECKED_CAST")]
|
[suppress("UNCHECKED_CAST")]
|
||||||
return if (getter != null) getter(receiver) as R else field!!.get(receiver) as R
|
return if (getter != null) getter(instance) as R else field!!.get(instance) as R
|
||||||
}
|
}
|
||||||
catch (e: IllegalAccessException) {
|
catch (e: IllegalAccessException) {
|
||||||
throw IllegalPropertyAccessException(e)
|
throw IllegalPropertyAccessException(e)
|
||||||
@@ -53,10 +53,10 @@ class KMutableMemberPropertyImpl<T : Any, R>(
|
|||||||
container: KClassImpl<T>,
|
container: KClassImpl<T>,
|
||||||
computeDescriptor: () -> PropertyDescriptor
|
computeDescriptor: () -> PropertyDescriptor
|
||||||
) : KMemberPropertyImpl<T, R>(container, computeDescriptor), KMutableMemberProperty<T, R>, KMutablePropertyImpl<R> {
|
) : KMemberPropertyImpl<T, R>(container, computeDescriptor), KMutableMemberProperty<T, R>, KMutablePropertyImpl<R> {
|
||||||
override fun set(receiver: T, value: R) {
|
override fun set(instance: T, value: R) {
|
||||||
try {
|
try {
|
||||||
val setter = setter
|
val setter = setter
|
||||||
if (setter != null) setter(receiver, value) else field!!.set(receiver, value)
|
if (setter != null) setter(instance, value) else field!!.set(instance, value)
|
||||||
}
|
}
|
||||||
catch (e: IllegalAccessException) {
|
catch (e: IllegalAccessException) {
|
||||||
throw IllegalPropertyAccessException(e)
|
throw IllegalPropertyAccessException(e)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
|
|||||||
private val kotlinFqNameToJvmDescNullable = linkedMapOf<FqName, String>()
|
private val kotlinFqNameToJvmDescNullable = linkedMapOf<FqName, String>()
|
||||||
private val jvmDescToKotlinClassId = linkedMapOf<String, ClassId>();
|
private val jvmDescToKotlinClassId = linkedMapOf<String, ClassId>();
|
||||||
|
|
||||||
{
|
init {
|
||||||
init()
|
init()
|
||||||
initPrimitives()
|
initPrimitives()
|
||||||
}
|
}
|
||||||
@@ -85,6 +85,13 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
|
|||||||
val classifier = type.getConstructor().getDeclarationDescriptor()
|
val classifier = type.getConstructor().getDeclarationDescriptor()
|
||||||
if (classifier is TypeParameterDescriptor) return mapTypeToJvmDesc(classifier.getUpperBounds().first())
|
if (classifier is TypeParameterDescriptor) return mapTypeToJvmDesc(classifier.getUpperBounds().first())
|
||||||
|
|
||||||
|
if (KotlinBuiltIns.isArray(type)) {
|
||||||
|
val elementType = KotlinBuiltIns.getInstance().getArrayElementType(type)
|
||||||
|
// makeNullable is called here to map primitive types to the corresponding wrappers,
|
||||||
|
// because the given type is Array<Something>, not SomethingArray
|
||||||
|
return "[" + mapTypeToJvmDesc(TypeUtils.makeNullable(elementType))
|
||||||
|
}
|
||||||
|
|
||||||
val classDescriptor = classifier as ClassDescriptor
|
val classDescriptor = classifier as ClassDescriptor
|
||||||
val fqNameUnsafe = DescriptorUtils.getFqName(classDescriptor)
|
val fqNameUnsafe = DescriptorUtils.getFqName(classDescriptor)
|
||||||
if (fqNameUnsafe.isSafe()) {
|
if (fqNameUnsafe.isSafe()) {
|
||||||
@@ -95,18 +102,6 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
|
|||||||
kotlinFqNameToJvmDesc[fqName]?.let { return it }
|
kotlinFqNameToJvmDesc[fqName]?.let { return it }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KotlinBuiltIns.isArray(type)) {
|
|
||||||
var dimension = 0
|
|
||||||
var elementType = type
|
|
||||||
|
|
||||||
while (KotlinBuiltIns.isArray(elementType)) {
|
|
||||||
elementType = KotlinBuiltIns.getInstance().getArrayElementType(elementType)
|
|
||||||
dimension++
|
|
||||||
}
|
|
||||||
|
|
||||||
return "[".repeat(dimension) + mapTypeToJvmDesc(TypeUtils.makeNullable(elementType))
|
|
||||||
}
|
|
||||||
|
|
||||||
return classDescriptor.classId.desc
|
return classDescriptor.classId.desc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ fun <T> foreignKotlinClass(jClass: Class<T>): KClassImpl<T> {
|
|||||||
val name = jClass.getName()
|
val name = jClass.getName()
|
||||||
val cached = FOREIGN_K_CLASSES[name]
|
val cached = FOREIGN_K_CLASSES[name]
|
||||||
if (cached is WeakReference<*>) {
|
if (cached is WeakReference<*>) {
|
||||||
|
[suppress("UNCHECKED_CAST")]
|
||||||
val kClass = cached.get() as KClassImpl<T>?
|
val kClass = cached.get() as KClassImpl<T>?
|
||||||
if (kClass?.jClass == jClass) {
|
if (kClass?.jClass == jClass) {
|
||||||
return kClass!!
|
return kClass!!
|
||||||
|
|||||||
Reference in New Issue
Block a user