Do not create additional module for built-ins in reflection
This commit is contained in:
+7
-2
@@ -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 {
|
||||||
|
|||||||
+10
-3
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user