Do not create additional module for built-ins in reflection

This commit is contained in:
Alexander Udalov
2017-07-14 23:40:21 +03:00
parent ed86757817
commit c32d7ef116
2 changed files with 17 additions and 5 deletions
@@ -16,11 +16,13 @@
package kotlin.reflect.jvm.internal.components package kotlin.reflect.jvm.internal.components
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder.Result.KotlinClass import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder.Result.KotlinClass
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
import java.io.InputStream import java.io.InputStream
class ReflectKotlinClassFinder(private val classLoader: ClassLoader) : KotlinClassFinder { class ReflectKotlinClassFinder(private val classLoader: ClassLoader) : KotlinClassFinder {
@@ -41,8 +43,11 @@ class ReflectKotlinClassFinder(private val classLoader: ClassLoader) : KotlinCla
// TODO // TODO
override fun hasMetadataPackage(fqName: FqName): Boolean = false override fun hasMetadataPackage(fqName: FqName): Boolean = false
// TODO: load built-ins from classLoader override fun findBuiltInsData(packageFqName: FqName): InputStream? {
override fun findBuiltInsData(packageFqName: FqName): InputStream? = null if (!packageFqName.startsWith(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null
return classLoader.getResourceAsStream(BuiltInSerializerProtocol.getBuiltInsFilePath(packageFqName))
}
} }
private fun ClassId.toRuntimeFqName(): String { private fun ClassId.toRuntimeFqName(): String {
@@ -18,9 +18,11 @@ package kotlin.reflect.jvm.internal.components
import org.jetbrains.kotlin.builtins.ReflectionTypes import org.jetbrains.kotlin.builtins.ReflectionTypes
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsPackageFragmentProvider
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.NotFoundClasses import org.jetbrains.kotlin.descriptors.NotFoundClasses
import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
@@ -55,8 +57,9 @@ class RuntimeModuleData private constructor(
companion object { companion object {
fun create(classLoader: ClassLoader): RuntimeModuleData { fun create(classLoader: ClassLoader): RuntimeModuleData {
val storageManager = LockBasedStorageManager("RuntimeModuleData") val storageManager = LockBasedStorageManager("RuntimeModuleData")
val builtIns = JvmBuiltIns(storageManager) val builtIns = JvmBuiltIns(storageManager, false)
val module = ModuleDescriptorImpl(Name.special("<runtime module for $classLoader>"), storageManager, builtIns) val module = ModuleDescriptorImpl(Name.special("<runtime module for $classLoader>"), storageManager, builtIns)
builtIns.builtInsModule = module
val reflectKotlinClassFinder = ReflectKotlinClassFinder(classLoader) val reflectKotlinClassFinder = ReflectKotlinClassFinder(classLoader)
val deserializedDescriptorResolver = DeserializedDescriptorResolver() val deserializedDescriptorResolver = DeserializedDescriptorResolver()
@@ -89,12 +92,16 @@ class RuntimeModuleData private constructor(
binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider, notFoundClasses, binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider, notFoundClasses,
RuntimeErrorReporter, LookupTracker.DO_NOTHING, ContractDeserializer.DEFAULT RuntimeErrorReporter, LookupTracker.DO_NOTHING, ContractDeserializer.DEFAULT
) )
val builtinsProvider = JvmBuiltInsPackageFragmentProvider(
storageManager, reflectKotlinClassFinder, module, notFoundClasses, builtIns.settings, builtIns.settings,
DeserializationConfiguration.Default
)
singleModuleClassResolver.resolver = javaDescriptorResolver singleModuleClassResolver.resolver = javaDescriptorResolver
deserializedDescriptorResolver.setComponents(deserializationComponentsForJava) deserializedDescriptorResolver.setComponents(deserializationComponentsForJava)
module.setDependencies(module, builtIns.builtInsModule) module.setDependencies(module)
module.initialize(javaDescriptorResolver.packageFragmentProvider) module.initialize(CompositePackageFragmentProvider(listOf(javaDescriptorResolver.packageFragmentProvider, builtinsProvider)))
return RuntimeModuleData(deserializationComponentsForJava.components, runtimePackagePartProvider) return RuntimeModuleData(deserializationComponentsForJava.components, runtimePackagePartProvider)
} }