Minor, simplify/optimize KClassImpl creation

This commit is contained in:
Alexander Udalov
2015-02-18 13:27:51 +03:00
parent ecde41d9ab
commit ba0ea1515b
2 changed files with 13 additions and 17 deletions
@@ -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<KotlinClass>()
private val KOTLIN_SYNTHETIC_CLASS_ANNOTATION_CLASS = javaClass<KotlinSyntheticClass>()
class KClassImpl<T>(val jClass: Class<T>) : KClass<T> {
// 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> {
// 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<KotlinClass>())) {
KClassOrigin.KOTLIN
}
else {
KClassOrigin.FOREIGN
// TODO: built-in classes
}
}
fun memberProperty(name: String): KMemberProperty<T, *> =
if (origin === KClassOrigin.KOTLIN) {
@@ -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