Move JvmBuiltIns initialization after container setup
It will be used in the further commits to initilize built-ins instance with components as arguments
This commit is contained in:
@@ -23,13 +23,13 @@ import org.jetbrains.kotlin.context.ModuleContext
|
|||||||
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.frontend.di.configureModule
|
import org.jetbrains.kotlin.frontend.di.configureModule
|
||||||
import org.jetbrains.kotlin.frontend.java.di.configureJavaTopDownAnalysis
|
import org.jetbrains.kotlin.frontend.java.di.configureJavaTopDownAnalysis
|
||||||
|
import org.jetbrains.kotlin.frontend.java.di.initJvmBuiltInsForTopDownAnalysis
|
||||||
|
import org.jetbrains.kotlin.frontend.java.di.javaAnalysisInit
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.load.java.JavaClassFinderImpl
|
|
||||||
import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
|
import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
@@ -52,8 +52,9 @@ fun createContainerForReplWithJava(
|
|||||||
|
|
||||||
useImpl<SingleModuleClassResolver>()
|
useImpl<SingleModuleClassResolver>()
|
||||||
}.let {
|
}.let {
|
||||||
it.get<JavaClassFinderImpl>().initialize()
|
it.javaAnalysisInit()
|
||||||
it.get<JavaClassFinderPostConstruct>().postCreate()
|
it.initJvmBuiltInsForTopDownAnalysis()
|
||||||
|
|
||||||
ContainerForReplWithJava(it)
|
ContainerForReplWithJava(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
|
|||||||
import org.jetbrains.kotlin.container.*
|
import org.jetbrains.kotlin.container.*
|
||||||
import org.jetbrains.kotlin.context.LazyResolveToken
|
import org.jetbrains.kotlin.context.LazyResolveToken
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.frontend.di.configureModule
|
import org.jetbrains.kotlin.frontend.di.configureModule
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
@@ -33,6 +34,7 @@ import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
|
|||||||
import org.jetbrains.kotlin.load.java.sam.SamConversionResolverImpl
|
import org.jetbrains.kotlin.load.java.sam.SamConversionResolverImpl
|
||||||
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
|
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmVirtualFileFinderFactory
|
import org.jetbrains.kotlin.load.kotlin.JvmVirtualFileFinderFactory
|
||||||
|
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||||
@@ -125,15 +127,22 @@ fun createContainerForTopDownAnalyzerForJvm(
|
|||||||
useImpl<SingleModuleClassResolver>()
|
useImpl<SingleModuleClassResolver>()
|
||||||
}.let {
|
}.let {
|
||||||
it.javaAnalysisInit()
|
it.javaAnalysisInit()
|
||||||
|
it.initJvmBuiltInsForTopDownAnalysis()
|
||||||
|
|
||||||
ContainerForTopDownAnalyzerForJvm(it)
|
ContainerForTopDownAnalyzerForJvm(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun StorageComponentContainer.javaAnalysisInit() {
|
fun StorageComponentContainer.javaAnalysisInit() {
|
||||||
get<JavaClassFinderImpl>().initialize()
|
get<JavaClassFinderImpl>().initialize()
|
||||||
get<JavaClassFinderPostConstruct>().postCreate()
|
get<JavaClassFinderPostConstruct>().postCreate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 'initBuiltIns' body cannot be merged with 'javaAnalysisInit' because the latter is used in IDE,
|
||||||
|
// where built-ins instances are shared between modules and manual initialization is necessary (to avoid multiple initialization)
|
||||||
|
fun StorageComponentContainer.initJvmBuiltInsForTopDownAnalysis() {
|
||||||
|
get<JvmBuiltIns>().initialize(get<ModuleDescriptor>())
|
||||||
|
}
|
||||||
|
|
||||||
class ContainerForTopDownAnalyzerForJvm(container: StorageComponentContainer) {
|
class ContainerForTopDownAnalyzerForJvm(container: StorageComponentContainer) {
|
||||||
val lazyTopDownAnalyzerForTopLevel: LazyTopDownAnalyzerForTopLevel by container
|
val lazyTopDownAnalyzerForTopLevel: LazyTopDownAnalyzerForTopLevel by container
|
||||||
val javaDescriptorResolver: JavaDescriptorResolver by container
|
val javaDescriptorResolver: JavaDescriptorResolver by container
|
||||||
|
|||||||
-1
@@ -154,7 +154,6 @@ public enum TopDownAnalyzerFacadeForJVM {
|
|||||||
projectContext, Name.special("<" + configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME) + ">"),
|
projectContext, Name.special("<" + configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME) + ">"),
|
||||||
JvmPlatform.INSTANCE, builtIns
|
JvmPlatform.INSTANCE, builtIns
|
||||||
);
|
);
|
||||||
builtIns.setOwnerModuleDescriptor(context.getModule());
|
|
||||||
context.setDependencies(context.getModule(), context.getBuiltIns().getBuiltInsModule());
|
context.setDependencies(context.getModule(), context.getBuiltIns().getBuiltInsModule());
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -48,7 +48,6 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
|
|||||||
fun testAllListedSignaturesExistInJdk() {
|
fun testAllListedSignaturesExistInJdk() {
|
||||||
val jvmBuiltIns = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS)
|
val jvmBuiltIns = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS)
|
||||||
val emptyModule = KotlinTestUtils.createEmptyModule("<empty>", JvmPlatform, jvmBuiltIns)
|
val emptyModule = KotlinTestUtils.createEmptyModule("<empty>", JvmPlatform, jvmBuiltIns)
|
||||||
jvmBuiltIns.setOwnerModuleDescriptor(emptyModule)
|
|
||||||
|
|
||||||
val moduleContext = ModuleContext(emptyModule, environment.project)
|
val moduleContext = ModuleContext(emptyModule, environment.project)
|
||||||
val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, emptyList())
|
val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, emptyList())
|
||||||
|
|||||||
@@ -396,10 +396,8 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest {
|
|||||||
@NotNull
|
@NotNull
|
||||||
protected ModuleDescriptorImpl createModule(@NotNull String moduleName, @NotNull StorageManager storageManager) {
|
protected ModuleDescriptorImpl createModule(@NotNull String moduleName, @NotNull StorageManager storageManager) {
|
||||||
JvmBuiltIns builtIns = new JvmBuiltIns(storageManager);
|
JvmBuiltIns builtIns = new JvmBuiltIns(storageManager);
|
||||||
ModuleDescriptorImpl module = TargetPlatformKt.createModule(
|
return TargetPlatformKt.createModule(
|
||||||
JvmPlatform.INSTANCE, Name.special(moduleName), storageManager, builtIns);
|
JvmPlatform.INSTANCE, Name.special(moduleName), storageManager, builtIns);
|
||||||
builtIns.setOwnerModuleDescriptor(module);
|
|
||||||
return module;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+1
-1
@@ -77,7 +77,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() {
|
|||||||
packagePartProviderFactory = { a, b -> JvmPackagePartProvider(environment) }
|
packagePartProviderFactory = { a, b -> JvmPackagePartProvider(environment) }
|
||||||
)
|
)
|
||||||
|
|
||||||
builtIns.setOwnerModuleDescriptor(resolverForProject.descriptorForModule(resolverForProject.allModules.first()))
|
builtIns.initialize(resolverForProject.descriptorForModule(resolverForProject.allModules.first()))
|
||||||
|
|
||||||
performChecks(resolverForProject, modules)
|
performChecks(resolverForProject, modules)
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -56,7 +56,6 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment()
|
|||||||
|
|
||||||
val jvmBuiltIns = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS)
|
val jvmBuiltIns = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS)
|
||||||
val emptyModule = KotlinTestUtils.createEmptyModule("<empty>", JvmPlatform, jvmBuiltIns)
|
val emptyModule = KotlinTestUtils.createEmptyModule("<empty>", JvmPlatform, jvmBuiltIns)
|
||||||
jvmBuiltIns.setOwnerModuleDescriptor(emptyModule)
|
|
||||||
|
|
||||||
val moduleContext = ModuleContext(emptyModule, environment.project)
|
val moduleContext = ModuleContext(emptyModule, environment.project)
|
||||||
val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, emptyList())
|
val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, emptyList())
|
||||||
|
|||||||
+6
-3
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.load.kotlin
|
|||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider
|
import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider
|
||||||
|
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
@@ -37,14 +38,16 @@ class DeserializationComponentsForJava(
|
|||||||
val components: DeserializationComponents
|
val components: DeserializationComponents
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val settings = JvmBuiltInsSettings(moduleDescriptor, storageManager, { moduleDescriptor })
|
// currently built-ins may be not an instance of JvmBuiltIns only in case of built-ins serialization
|
||||||
|
val jvmBuiltIns = moduleDescriptor.builtIns as? JvmBuiltIns
|
||||||
components = DeserializationComponents(
|
components = DeserializationComponents(
|
||||||
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
|
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
|
||||||
LocalClassifierTypeSettings.Default,
|
LocalClassifierTypeSettings.Default,
|
||||||
errorReporter, lookupTracker, JavaFlexibleTypeDeserializer, ClassDescriptorFactory.EMPTY,
|
errorReporter, lookupTracker, JavaFlexibleTypeDeserializer, ClassDescriptorFactory.EMPTY,
|
||||||
notFoundClasses,
|
notFoundClasses,
|
||||||
additionalClassPartsProvider = settings,
|
additionalClassPartsProvider = jvmBuiltIns?.settings ?: AdditionalClassPartsProvider.None,
|
||||||
platformDependentDeclarationFilter = settings
|
platformDependentDeclarationFilter =
|
||||||
|
jvmBuiltIns?.settings ?: PlatformDependentDeclarationFilter.NoPlatformDependent
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.platform
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmBuiltInsSettings
|
import org.jetbrains.kotlin.load.kotlin.JvmBuiltInsSettings
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.AdditionalClassPartsProvider
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.PlatformDependentDeclarationFilter
|
import org.jetbrains.kotlin.serialization.deserialization.PlatformDependentDeclarationFilter
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
@@ -28,12 +27,13 @@ class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManage
|
|||||||
// Module containing JDK classes or having them among dependencies
|
// Module containing JDK classes or having them among dependencies
|
||||||
private var ownerModuleDescriptor: ModuleDescriptor? = null
|
private var ownerModuleDescriptor: ModuleDescriptor? = null
|
||||||
|
|
||||||
fun setOwnerModuleDescriptor(moduleDescriptor: ModuleDescriptor) {
|
fun initialize(moduleDescriptor: ModuleDescriptor) {
|
||||||
assert(ownerModuleDescriptor == null) { "JvmBuiltins repeated initialization" }
|
assert(ownerModuleDescriptor == null) { "JvmBuiltins repeated initialization" }
|
||||||
this.ownerModuleDescriptor = moduleDescriptor
|
this.ownerModuleDescriptor = moduleDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var settings: JvmBuiltInsSettings
|
lateinit var settings: JvmBuiltInsSettings
|
||||||
|
private set
|
||||||
|
|
||||||
// Here we know order in which KotlinBuiltIns constructor calls these methods
|
// Here we know order in which KotlinBuiltIns constructor calls these methods
|
||||||
override fun getPlatformDependentDeclarationFilter(): PlatformDependentDeclarationFilter {
|
override fun getPlatformDependentDeclarationFilter(): PlatformDependentDeclarationFilter {
|
||||||
|
|||||||
+2
-2
@@ -36,7 +36,6 @@ import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
|||||||
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.LocalClassifierTypeSettings
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses
|
import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
|
|
||||||
@@ -64,7 +63,7 @@ class RuntimeModuleData private constructor(val deserialization: Deserialization
|
|||||||
|
|
||||||
val lazyJavaPackageFragmentProvider = LazyJavaPackageFragmentProvider(globalJavaResolverContext)
|
val lazyJavaPackageFragmentProvider = LazyJavaPackageFragmentProvider(globalJavaResolverContext)
|
||||||
|
|
||||||
builtIns.setOwnerModuleDescriptor(module)
|
builtIns.initialize(module)
|
||||||
|
|
||||||
val javaDescriptorResolver = JavaDescriptorResolver(lazyJavaPackageFragmentProvider, javaResolverCache)
|
val javaDescriptorResolver = JavaDescriptorResolver(lazyJavaPackageFragmentProvider, javaResolverCache)
|
||||||
val javaClassDataFinder = JavaClassDataFinder(reflectKotlinClassFinder, deserializedDescriptorResolver)
|
val javaClassDataFinder = JavaClassDataFinder(reflectKotlinClassFinder, deserializedDescriptorResolver)
|
||||||
@@ -76,6 +75,7 @@ class RuntimeModuleData private constructor(val deserialization: Deserialization
|
|||||||
storageManager, module, javaClassDataFinder, binaryClassAnnotationAndConstantLoader,
|
storageManager, module, javaClassDataFinder, binaryClassAnnotationAndConstantLoader,
|
||||||
lazyJavaPackageFragmentProvider, notFoundClasses, RuntimeErrorReporter, LookupTracker.DO_NOTHING
|
lazyJavaPackageFragmentProvider, notFoundClasses, RuntimeErrorReporter, LookupTracker.DO_NOTHING
|
||||||
)
|
)
|
||||||
|
|
||||||
singleModuleClassResolver.resolver = javaDescriptorResolver
|
singleModuleClassResolver.resolver = javaDescriptorResolver
|
||||||
deserializedDescriptorResolver.setComponents(deserializationComponentsForJava)
|
deserializedDescriptorResolver.setComponents(deserializationComponentsForJava)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -381,7 +381,7 @@ private fun globalResolveSessionProvider(
|
|||||||
|
|
||||||
if (newBuiltIns is JvmBuiltIns) {
|
if (newBuiltIns is JvmBuiltIns) {
|
||||||
val sdkInfo = SdkInfo(project, sdk!!)
|
val sdkInfo = SdkInfo(project, sdk!!)
|
||||||
newBuiltIns.setOwnerModuleDescriptor(moduleResolverProvider.resolverForProject.descriptorForModule(sdkInfo))
|
newBuiltIns.initialize(moduleResolverProvider.resolverForProject.descriptorForModule(sdkInfo))
|
||||||
}
|
}
|
||||||
|
|
||||||
moduleResolverProvider
|
moduleResolverProvider
|
||||||
|
|||||||
Reference in New Issue
Block a user