From 2992d49a1d5a30e748c07835dc13abc28dd9b5c6 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Tue, 28 Apr 2020 19:08:44 +0300 Subject: [PATCH] JS IR: fix `findAssociatedObjects` for primitive type KClass'es --- .../testData/box/reflection/findAssociatedObject.kt | 4 ++++ libraries/stdlib/js-ir/src/kotlin/reflection_js-ir.kt | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/js/js.translator/testData/box/reflection/findAssociatedObject.kt b/js/js.translator/testData/box/reflection/findAssociatedObject.kt index 59e41d275ab..2d0b37b7f5e 100644 --- a/js/js.translator/testData/box/reflection/findAssociatedObject.kt +++ b/js/js.translator/testData/box/reflection/findAssociatedObject.kt @@ -93,5 +93,9 @@ fun box(): String { if ((A::class.getAssociatedObjectByAssociated2() as I2).foo() != 20) return "fail 10" + if (Int::class.findAssociatedObject() != null) return "fail 11" + + if (10::class.findAssociatedObject() != null) return "fail 12" + return "OK" } \ No newline at end of file diff --git a/libraries/stdlib/js-ir/src/kotlin/reflection_js-ir.kt b/libraries/stdlib/js-ir/src/kotlin/reflection_js-ir.kt index 834ae920c6b..cd15da6a0ed 100644 --- a/libraries/stdlib/js-ir/src/kotlin/reflection_js-ir.kt +++ b/libraries/stdlib/js-ir/src/kotlin/reflection_js-ir.kt @@ -9,8 +9,8 @@ import kotlin.reflect.js.internal.* @PublishedApi internal fun KClass<*>.findAssociatedObject(annotationClass: KClass): Any? { return if (this is KClassImpl<*> && annotationClass is KClassImpl) { - val key = annotationClass.jClass.asDynamic().`$metadata$`.associatedObjectKey?.unsafeCast() ?: return null - val map = this.jClass.asDynamic().`$metadata$`.associatedObjects ?: return null + val key = annotationClass.jClass.asDynamic().`$metadata$`?.associatedObjectKey?.unsafeCast() ?: return null + val map = this.jClass.asDynamic().`$metadata$`?.associatedObjects ?: return null val factory = map[key] ?: return null return factory() } else {