Fix warnings in module 'reflection.jvm', clarify some code

This commit is contained in:
Alexander Udalov
2015-03-18 17:26:43 +03:00
parent 4e7d4f9340
commit e60c299def
4 changed files with 17 additions and 21 deletions
@@ -33,10 +33,10 @@ open class KMemberExtensionPropertyImpl<D : Any, E, out R>(
override val field: Field? get() = null
override fun get(dispatchReceiver: D, extensionReceiver: E): R {
override fun get(instance: D, extensionReceiver: E): R {
try {
[suppress("UNCHECKED_CAST")]
return getter.invoke(dispatchReceiver, extensionReceiver) as R
return getter.invoke(instance, extensionReceiver) as R
}
catch (e: IllegalAccessException) {
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> {
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 {
setter.invoke(dispatchReceiver, extensionReceiver, value)
setter.invoke(instance, extensionReceiver, value)
}
catch (e: IllegalAccessException) {
throw IllegalPropertyAccessException(e)
@@ -27,11 +27,11 @@ open class KMemberPropertyImpl<T : Any, out R>(
) : DescriptorBasedProperty(computeDescriptor), KMemberProperty<T, R>, KPropertyImpl<R> {
override val name: String get() = descriptor.getName().asString()
override fun get(receiver: T): R {
override fun get(instance: T): R {
try {
val getter = getter
[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) {
throw IllegalPropertyAccessException(e)
@@ -53,10 +53,10 @@ class KMutableMemberPropertyImpl<T : Any, R>(
container: KClassImpl<T>,
computeDescriptor: () -> PropertyDescriptor
) : 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 {
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) {
throw IllegalPropertyAccessException(e)
@@ -36,7 +36,7 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
private val kotlinFqNameToJvmDescNullable = linkedMapOf<FqName, String>()
private val jvmDescToKotlinClassId = linkedMapOf<String, ClassId>();
{
init {
init()
initPrimitives()
}
@@ -85,6 +85,13 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
val classifier = type.getConstructor().getDeclarationDescriptor()
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 fqNameUnsafe = DescriptorUtils.getFqName(classDescriptor)
if (fqNameUnsafe.isSafe()) {
@@ -95,18 +102,6 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
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
}
@@ -31,6 +31,7 @@ fun <T> foreignKotlinClass(jClass: Class<T>): KClassImpl<T> {
val name = jClass.getName()
val cached = FOREIGN_K_CLASSES[name]
if (cached is WeakReference<*>) {
[suppress("UNCHECKED_CAST")]
val kClass = cached.get() as KClassImpl<T>?
if (kClass?.jClass == jClass) {
return kClass!!