@@ -37,6 +37,7 @@ import kotlin.reflect.KType
3737import kotlin.reflect.defaultType
3838import kotlin.reflect.jvm.isAccessible
3939import kotlin.reflect.jvm.javaType
40+ import kotlin.reflect.jvm.jvmName
4041
4142/* *
4243 * A collection of functions that tries to create an instance of
@@ -54,6 +55,7 @@ fun <T : Any> createInstance(kClass: KClass<T>): T {
5455 kClass.isPrimitive() -> kClass.toDefaultPrimitiveValue()
5556 kClass.isEnum() -> kClass.java.enumConstants.first()
5657 kClass.isArray() -> kClass.toArrayInstance()
58+ kClass.isClassObject() -> kClass.toClassObject()
5759 else -> kClass.easiestConstructor().newInstance()
5860 }
5961}
@@ -84,6 +86,7 @@ private fun KClass<*>.hasObjectInstance() = objectInstance != null
8486private fun KClass <* >.isMockable () = ! Modifier .isFinal(java.modifiers)
8587private fun KClass <* >.isEnum () = java.isEnum
8688private fun KClass <* >.isArray () = java.isArray
89+ private fun KClass <* >.isClassObject () = jvmName.equals(" java.lang.Class" )
8790private fun KClass <* >.isPrimitive () =
8891 java.isPrimitive || ! defaultType.isMarkedNullable && simpleName in arrayOf(
8992 " Boolean" ,
@@ -124,6 +127,11 @@ private fun <T : Any> KClass<T>.toArrayInstance(): T {
124127 } as T
125128}
126129
130+ @Suppress(" UNCHECKED_CAST" )
131+ private fun <T : Any > KClass<T>.toClassObject (): T {
132+ return Class .forName(" java.lang.Object" ) as T
133+ }
134+
127135private fun <T : Any > KFunction<T>.newInstance (): T {
128136 isAccessible = true
129137 return callBy(parameters.associate {
0 commit comments