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.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