diff --git a/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/ReflectKotlinClassFinder.kt b/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/ReflectKotlinClassFinder.kt index 7dacdc143fe..daf3ed8c36e 100644 --- a/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/ReflectKotlinClassFinder.kt +++ b/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/ReflectKotlinClassFinder.kt @@ -16,11 +16,13 @@ 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.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder.Result.KotlinClass import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import java.io.InputStream class ReflectKotlinClassFinder(private val classLoader: ClassLoader) : KotlinClassFinder { @@ -41,8 +43,11 @@ class ReflectKotlinClassFinder(private val classLoader: ClassLoader) : KotlinCla // TODO override fun hasMetadataPackage(fqName: FqName): Boolean = false - // TODO: load built-ins from classLoader - override fun findBuiltInsData(packageFqName: FqName): InputStream? = null + override fun findBuiltInsData(packageFqName: FqName): InputStream? { + if (!packageFqName.startsWith(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null + + return classLoader.getResourceAsStream(BuiltInSerializerProtocol.getBuiltInsFilePath(packageFqName)) + } } private fun ClassId.toRuntimeFqName(): String { diff --git a/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt b/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt index 594da581716..97e3f97ee9c 100644 --- a/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt @@ -18,9 +18,11 @@ package kotlin.reflect.jvm.internal.components import org.jetbrains.kotlin.builtins.ReflectionTypes 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.NotFoundClasses import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker +import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver @@ -55,8 +57,9 @@ class RuntimeModuleData private constructor( companion object { fun create(classLoader: ClassLoader): RuntimeModuleData { val storageManager = LockBasedStorageManager("RuntimeModuleData") - val builtIns = JvmBuiltIns(storageManager) + val builtIns = JvmBuiltIns(storageManager, false) val module = ModuleDescriptorImpl(Name.special(""), storageManager, builtIns) + builtIns.builtInsModule = module val reflectKotlinClassFinder = ReflectKotlinClassFinder(classLoader) val deserializedDescriptorResolver = DeserializedDescriptorResolver() @@ -89,12 +92,16 @@ class RuntimeModuleData private constructor( binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider, notFoundClasses, RuntimeErrorReporter, LookupTracker.DO_NOTHING, ContractDeserializer.DEFAULT ) + val builtinsProvider = JvmBuiltInsPackageFragmentProvider( + storageManager, reflectKotlinClassFinder, module, notFoundClasses, builtIns.settings, builtIns.settings, + DeserializationConfiguration.Default + ) singleModuleClassResolver.resolver = javaDescriptorResolver deserializedDescriptorResolver.setComponents(deserializationComponentsForJava) - module.setDependencies(module, builtIns.builtInsModule) - module.initialize(javaDescriptorResolver.packageFragmentProvider) + module.setDependencies(module) + module.initialize(CompositePackageFragmentProvider(listOf(javaDescriptorResolver.packageFragmentProvider, builtinsProvider))) return RuntimeModuleData(deserializationComponentsForJava.components, runtimePackagePartProvider) }