Minor, simplify/optimize KClassImpl creation
This commit is contained in:
@@ -18,7 +18,6 @@ package kotlin.reflect.jvm.internal
|
|||||||
|
|
||||||
import kotlin.reflect.*
|
import kotlin.reflect.*
|
||||||
import kotlin.jvm.internal.KotlinClass
|
import kotlin.jvm.internal.KotlinClass
|
||||||
import kotlin.jvm.internal.KotlinSyntheticClass
|
|
||||||
|
|
||||||
enum class KClassOrigin {
|
enum class KClassOrigin {
|
||||||
BUILT_IN
|
BUILT_IN
|
||||||
@@ -26,22 +25,19 @@ enum class KClassOrigin {
|
|||||||
FOREIGN
|
FOREIGN
|
||||||
}
|
}
|
||||||
|
|
||||||
private val KOTLIN_CLASS_ANNOTATION_CLASS = javaClass<KotlinClass>()
|
class KClassImpl<T>(val jClass: Class<T>) : KClass<T> {
|
||||||
private val KOTLIN_SYNTHETIC_CLASS_ANNOTATION_CLASS = javaClass<KotlinSyntheticClass>()
|
// Don't use kotlin.properties.Delegates here because it's a Kotlin class which will invoke KClassImpl() in <clinit>,
|
||||||
|
// resulting in infinite recursion
|
||||||
|
|
||||||
class KClassImpl<T>(val jClass: Class<T>, isKnownToBeKotlin: Boolean = false) : KClass<T> {
|
private val origin by ReflectProperties.lazy {(): KClassOrigin ->
|
||||||
// TODO: write metadata to local classes
|
if (jClass.isAnnotationPresent(javaClass<KotlinClass>())) {
|
||||||
private val origin: KClassOrigin =
|
KClassOrigin.KOTLIN
|
||||||
if (isKnownToBeKotlin ||
|
}
|
||||||
jClass.isAnnotationPresent(KOTLIN_CLASS_ANNOTATION_CLASS) ||
|
else {
|
||||||
jClass.isAnnotationPresent(KOTLIN_SYNTHETIC_CLASS_ANNOTATION_CLASS)
|
KClassOrigin.FOREIGN
|
||||||
) {
|
// TODO: built-in classes
|
||||||
KClassOrigin.KOTLIN
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
KClassOrigin.FOREIGN
|
|
||||||
// TODO: built-in classes
|
|
||||||
}
|
|
||||||
|
|
||||||
fun memberProperty(name: String): KMemberProperty<T, *> =
|
fun memberProperty(name: String): KMemberProperty<T, *> =
|
||||||
if (origin === KClassOrigin.KOTLIN) {
|
if (origin === KClassOrigin.KOTLIN) {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import kotlin.reflect.*;
|
|||||||
public class ReflectionFactoryImpl extends ReflectionFactory {
|
public class ReflectionFactoryImpl extends ReflectionFactory {
|
||||||
@Override
|
@Override
|
||||||
public KClass createKotlinClass(Class javaClass) {
|
public KClass createKotlinClass(Class javaClass) {
|
||||||
return new KClassImpl(javaClass, true);
|
return new KClassImpl(javaClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user