PlatformConfigurator: create container for each platform (it contains static services, mostly checkers) ahead of time
This commit is contained in:
@@ -41,7 +41,7 @@ fun StorageComponentContainer.configureModule(
|
||||
|
||||
useInstance(platform)
|
||||
|
||||
platform.platformConfigurator.configure(this)
|
||||
platform.platformConfigurator.configureModuleComponents(this)
|
||||
|
||||
for (extension in StorageComponentContainerContributor.getInstances(moduleContext.project)) {
|
||||
extension.addDeclarations(this, platform)
|
||||
@@ -67,7 +67,7 @@ fun createContainerForBodyResolve(
|
||||
platform: TargetPlatform,
|
||||
statementFilter: StatementFilter,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
): StorageComponentContainer = createContainer("BodyResolve") {
|
||||
): StorageComponentContainer = createContainer("BodyResolve", platform) {
|
||||
configureModule(moduleContext, platform, bindingTrace)
|
||||
|
||||
useInstance(statementFilter)
|
||||
@@ -86,7 +86,7 @@ fun createContainerForLazyBodyResolve(
|
||||
platform: TargetPlatform,
|
||||
bodyResolveCache: BodyResolveCache,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
): StorageComponentContainer = createContainer("LazyBodyResolve") {
|
||||
): StorageComponentContainer = createContainer("LazyBodyResolve", platform) {
|
||||
configureModule(moduleContext, platform, bindingTrace)
|
||||
|
||||
useInstance(LookupTracker.DO_NOTHING)
|
||||
@@ -105,7 +105,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
|
||||
lookupTracker: LookupTracker,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
localClassDescriptorHolder: LocalClassDescriptorHolder
|
||||
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer") {
|
||||
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) {
|
||||
configureModule(moduleContext, platform, bindingTrace)
|
||||
|
||||
useInstance(localClassDescriptorHolder)
|
||||
@@ -132,7 +132,7 @@ fun createContainerForLazyResolve(
|
||||
platform: TargetPlatform,
|
||||
targetEnvironment: TargetEnvironment,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
): StorageComponentContainer = createContainer("LazyResolve") {
|
||||
): StorageComponentContainer = createContainer("LazyResolve", platform) {
|
||||
configureModule(moduleContext, platform, bindingTrace)
|
||||
|
||||
useInstance(declarationProviderFactory)
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||
import org.jetbrains.kotlin.container.composeContainer
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleParameters
|
||||
@@ -45,8 +46,7 @@ abstract class TargetPlatform(
|
||||
override val platformConfigurator =
|
||||
object : PlatformConfigurator(DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(),
|
||||
IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT) {
|
||||
override fun configure(container: StorageComponentContainer) {
|
||||
super.configure(container)
|
||||
override fun configureModuleComponents(container: StorageComponentContainer) {
|
||||
container.useInstance(SyntheticScopes.Empty)
|
||||
container.useInstance(SyntheticConstructorsProvider.Empty)
|
||||
container.useInstance(TypeSpecificityComparator.NONE)
|
||||
@@ -89,17 +89,17 @@ abstract class PlatformConfigurator(
|
||||
private val typeCheckers: List<AdditionalTypeChecker> = DEFAULT_TYPE_CHECKERS + additionalTypeCheckers
|
||||
private val classifierUsageCheckers: List<ClassifierUsageChecker> = DEFAULT_CLASSIFIER_USAGE_CHECKERS + additionalClassifierUsageCheckers
|
||||
|
||||
open fun configure(container: StorageComponentContainer) {
|
||||
with (container) {
|
||||
useInstance(dynamicTypesSettings)
|
||||
declarationCheckers.forEach { useInstance(it) }
|
||||
callCheckers.forEach { useInstance(it) }
|
||||
typeCheckers.forEach { useInstance(it) }
|
||||
classifierUsageCheckers.forEach { useInstance(it) }
|
||||
additionalAnnotationCheckers.forEach { useInstance(it) }
|
||||
useInstance(identifierChecker)
|
||||
useInstance(overloadFilter)
|
||||
}
|
||||
abstract fun configureModuleComponents(container: StorageComponentContainer)
|
||||
|
||||
val platformSpecificContainer = composeContainer(this.javaClass.simpleName) {
|
||||
useInstance(dynamicTypesSettings)
|
||||
declarationCheckers.forEach { useInstance(it) }
|
||||
callCheckers.forEach { useInstance(it) }
|
||||
typeCheckers.forEach { useInstance(it) }
|
||||
classifierUsageCheckers.forEach { useInstance(it) }
|
||||
additionalAnnotationCheckers.forEach { useInstance(it) }
|
||||
useInstance(identifierChecker)
|
||||
useInstance(overloadFilter)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,3 +110,7 @@ fun TargetPlatform.createModule(
|
||||
builtIns: KotlinBuiltIns,
|
||||
capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap()
|
||||
) = ModuleDescriptorImpl(name, storageManager, defaultModuleParameters, builtIns, capabilities)
|
||||
|
||||
|
||||
fun createContainer(id: String, platform: TargetPlatform, init: StorageComponentContainer.() -> Unit)
|
||||
= composeContainer(id, platform.platformConfigurator.platformSpecificContainer, init)
|
||||
|
||||
Reference in New Issue
Block a user