diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index 01ab78b43f8..7ea41948d7a 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -18,7 +18,6 @@ package kotlin.reflect.jvm.internal import kotlin.reflect.* import kotlin.jvm.internal.KotlinClass -import kotlin.jvm.internal.KotlinSyntheticClass enum class KClassOrigin { BUILT_IN @@ -26,22 +25,19 @@ enum class KClassOrigin { FOREIGN } -private val KOTLIN_CLASS_ANNOTATION_CLASS = javaClass() -private val KOTLIN_SYNTHETIC_CLASS_ANNOTATION_CLASS = javaClass() +class KClassImpl(val jClass: Class) : KClass { + // Don't use kotlin.properties.Delegates here because it's a Kotlin class which will invoke KClassImpl() in , + // resulting in infinite recursion -class KClassImpl(val jClass: Class, isKnownToBeKotlin: Boolean = false) : KClass { - // TODO: write metadata to local classes - private val origin: KClassOrigin = - if (isKnownToBeKotlin || - jClass.isAnnotationPresent(KOTLIN_CLASS_ANNOTATION_CLASS) || - jClass.isAnnotationPresent(KOTLIN_SYNTHETIC_CLASS_ANNOTATION_CLASS) - ) { - KClassOrigin.KOTLIN - } - else { - KClassOrigin.FOREIGN - // TODO: built-in classes - } + private val origin by ReflectProperties.lazy {(): KClassOrigin -> + if (jClass.isAnnotationPresent(javaClass())) { + KClassOrigin.KOTLIN + } + else { + KClassOrigin.FOREIGN + // TODO: built-in classes + } + } fun memberProperty(name: String): KMemberProperty = if (origin === KClassOrigin.KOTLIN) { diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionFactoryImpl.java b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionFactoryImpl.java index d18f14a9887..98fb87a2cf5 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionFactoryImpl.java +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionFactoryImpl.java @@ -23,7 +23,7 @@ import kotlin.reflect.*; public class ReflectionFactoryImpl extends ReflectionFactory { @Override public KClass createKotlinClass(Class javaClass) { - return new KClassImpl(javaClass, true); + return new KClassImpl(javaClass); } @Override