PlatformConfigurator: create container for each platform (it contains static services, mostly checkers) ahead of time

This commit is contained in:
Pavel V. Talanov
2016-09-22 16:37:30 +03:00
parent be00a6ec49
commit 32daf048c2
10 changed files with 62 additions and 53 deletions
@@ -18,7 +18,10 @@ package org.jetbrains.kotlin.cli.jvm.repl.di
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.* import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.getValue
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext 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
@@ -30,6 +33,7 @@ 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.createContainer
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
@@ -41,7 +45,7 @@ fun createContainerForReplWithJava(
declarationProviderFactory: DeclarationProviderFactory, declarationProviderFactory: DeclarationProviderFactory,
moduleContentScope: GlobalSearchScope, moduleContentScope: GlobalSearchScope,
packagePartProvider: PackagePartProvider packagePartProvider: PackagePartProvider
): ContainerForReplWithJava = createContainer("ReplWithJava") { ): ContainerForReplWithJava = createContainer("ReplWithJava", JvmPlatform) {
useInstance(packagePartProvider) useInstance(packagePartProvider)
configureModule(moduleContext, JvmPlatform, bindingTrace) configureModule(moduleContext, JvmPlatform, bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, LookupTracker.DO_NOTHING, LanguageVersionSettingsImpl.DEFAULT) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, LookupTracker.DO_NOTHING, LanguageVersionSettingsImpl.DEFAULT)
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.container
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
fun createContainer(id: String, parent: StorageComponentContainer? = null, init: StorageComponentContainer.() -> Unit): StorageComponentContainer { fun composeContainer(id: String, parent: StorageComponentContainer? = null, init: StorageComponentContainer.() -> Unit): StorageComponentContainer {
val c = StorageComponentContainer(id, parent) val c = StorageComponentContainer(id, parent)
c.init() c.init()
c.compose() c.compose()
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.container.tests package org.jetbrains.kotlin.container.tests
import org.jetbrains.kotlin.container.* import org.jetbrains.kotlin.container.*
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import javax.inject.Inject import javax.inject.Inject
import kotlin.test.* import kotlin.test.*
@@ -33,13 +32,13 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_to_null_when_empty() { fun should_resolve_to_null_when_empty() {
val container = createContainer("test") { } val container = composeContainer("test") { }
assertNull(container.resolve<TestComponentInterface>()) assertNull(container.resolve<TestComponentInterface>())
} }
@Test @Test
fun should_resolve_to_instance_when_registered() { fun should_resolve_to_instance_when_registered() {
val container = createContainer("test") { useImpl<TestComponent>() } val container = composeContainer("test") { useImpl<TestComponent>() }
val descriptor = container.resolve<TestComponentInterface>() val descriptor = container.resolve<TestComponentInterface>()
assertNotNull(descriptor) assertNotNull(descriptor)
@@ -52,7 +51,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_instance_dependency() { fun should_resolve_instance_dependency() {
val container = createContainer("test") { val container = composeContainer("test") {
useInstance(ManualTestComponent("name")) useInstance(ManualTestComponent("name"))
useImpl<TestClientComponent>() useImpl<TestClientComponent>()
} }
@@ -74,7 +73,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_type_dependency() { fun should_resolve_type_dependency() {
val container = createContainer("test") { val container = composeContainer("test") {
useImpl<TestComponent>() useImpl<TestComponent>()
useImpl<TestClientComponent>() useImpl<TestClientComponent>()
} }
@@ -94,7 +93,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_multiple_types() { fun should_resolve_multiple_types() {
createContainer("test") { composeContainer("test") {
useImpl<TestComponent>() useImpl<TestComponent>()
useImpl<TestClientComponent>() useImpl<TestClientComponent>()
useImpl<TestClientComponent2>() useImpl<TestClientComponent2>()
@@ -107,7 +106,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_singleton_types_to_same_instances() { fun should_resolve_singleton_types_to_same_instances() {
createContainer("test") { composeContainer("test") {
useImpl<TestComponent>() useImpl<TestComponent>()
useImpl<TestClientComponent>() useImpl<TestClientComponent>()
}.use { }.use {
@@ -122,7 +121,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_adhoc_types_to_same_instances() { fun should_resolve_adhoc_types_to_same_instances() {
createContainer("test") { composeContainer("test") {
useImpl<TestAdhocComponent1>() useImpl<TestAdhocComponent1>()
useImpl<TestAdhocComponent2>() useImpl<TestAdhocComponent2>()
}.use { }.use {
@@ -138,7 +137,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_iterable() { fun should_resolve_iterable() {
createContainer("test") { composeContainer("test") {
useImpl<TestComponent>() useImpl<TestComponent>()
useImpl<TestClientComponent>() useImpl<TestClientComponent>()
useImpl<TestClientComponent2>() useImpl<TestClientComponent2>()
@@ -155,7 +154,7 @@ class ComponentContainerTest {
@Test @Test
fun should_resolve_java_iterable() { fun should_resolve_java_iterable() {
createContainer("test") { composeContainer("test") {
useImpl<TestComponent>() useImpl<TestComponent>()
useImpl<TestClientComponent>() useImpl<TestClientComponent>()
useImpl<TestClientComponent2>() useImpl<TestClientComponent2>()
@@ -175,7 +174,7 @@ class ComponentContainerTest {
@Test @Test
fun should_distinguish_generic() { fun should_distinguish_generic() {
createContainer("test") { composeContainer("test") {
useImpl<TestGenericClient>() useImpl<TestGenericClient>()
useImpl<TestStringComponent>() useImpl<TestStringComponent>()
useImpl<TestIntComponent>() useImpl<TestIntComponent>()
@@ -192,7 +191,7 @@ class ComponentContainerTest {
@Ignore("Need generic type substitution") @Ignore("Need generic type substitution")
@Test @Test
fun should_resolve_generic_adhoc() { fun should_resolve_generic_adhoc() {
createContainer("test") { composeContainer("test") {
useImpl<TestImplicitGenericClient>() useImpl<TestImplicitGenericClient>()
}.use { }.use {
val descriptor = it.resolve<TestImplicitGenericClient>() val descriptor = it.resolve<TestImplicitGenericClient>()
@@ -205,7 +204,7 @@ class ComponentContainerTest {
@Test @Test
fun should_fail_with_invalid_cardinality() { fun should_fail_with_invalid_cardinality() {
createContainer("test") { composeContainer("test") {
useImpl<TestComponent>() useImpl<TestComponent>()
useInstance(TestComponent()) useInstance(TestComponent())
}.use { }.use {
@@ -228,7 +227,7 @@ class ComponentContainerTest {
@Test @Test
fun should_inject_properties_of_singletons() { fun should_inject_properties_of_singletons() {
val withSetters = createContainer("test") { val withSetters = composeContainer("test") {
useImpl<WithSetters>() useImpl<WithSetters>()
}.get<WithSetters>() }.get<WithSetters>()
@@ -238,7 +237,7 @@ class ComponentContainerTest {
@Test @Test
fun should_not_inject_properties_of_instances() { fun should_not_inject_properties_of_instances() {
val withSetters = WithSetters() val withSetters = WithSetters()
createContainer("test") { composeContainer("test") {
useInstance(withSetters) useInstance(withSetters)
} }
@@ -260,7 +259,7 @@ class ComponentContainerTest {
@Inject set @Inject set
} }
val a = createContainer("test") { val a = composeContainer("test") {
useImpl<A>() useImpl<A>()
}.get<A>() }.get<A>()
@@ -275,11 +274,11 @@ class ComponentContainerTest {
class A class A
class B(val a: A) class B(val a: A)
val ac = createContainer("a") { val ac = composeContainer("a") {
useImpl<A>() useImpl<A>()
} }
val bc = createContainer("b", ac) { val bc = composeContainer("b", ac) {
useImpl<B>() useImpl<B>()
} }
val b = bc.get<B>() val b = bc.get<B>()
@@ -296,14 +295,14 @@ class ComponentContainerTest {
class A class A
class B(val a: A) class B(val a: A)
val ac = createContainer("a") { val ac = composeContainer("a") {
useImpl<A>() useImpl<A>()
} }
val bc1 = createContainer("b1", ac) { val bc1 = composeContainer("b1", ac) {
useImpl<B>() useImpl<B>()
} }
val bc2 = createContainer("b2", ac) { val bc2 = composeContainer("b2", ac) {
useImpl<B>() useImpl<B>()
} }
val a = ac.get<A>() val a = ac.get<A>()
@@ -87,7 +87,7 @@ fun createContainerForLazyResolveWithJava(
targetEnvironment: TargetEnvironment = CompilerEnvironment, targetEnvironment: TargetEnvironment = CompilerEnvironment,
packagePartProvider: PackagePartProvider, packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): ComponentProvider = createContainer("LazyResolveWithJava") { ): ComponentProvider = createContainer("LazyResolveWithJava", JvmPlatform) {
//TODO: idea specific code //TODO: idea specific code
useInstance(packagePartProvider) useInstance(packagePartProvider)
@@ -115,7 +115,7 @@ fun createContainerForTopDownAnalyzerForJvm(
lookupTracker: LookupTracker, lookupTracker: LookupTracker,
packagePartProvider: PackagePartProvider, packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm") { ): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm", JvmPlatform) {
useInstance(packagePartProvider) useInstance(packagePartProvider)
configureModule(moduleContext, JvmPlatform, bindingTrace) configureModule(moduleContext, JvmPlatform, bindingTrace)
@@ -76,9 +76,7 @@ object JvmPlatformConfigurator : PlatformConfigurator(
overloadFilter = JvmOverloadFilter overloadFilter = JvmOverloadFilter
) { ) {
override fun configure(container: StorageComponentContainer) { override fun configureModuleComponents(container: StorageComponentContainer) {
super.configure(container)
container.useImpl<ReflectionAPICallChecker>() container.useImpl<ReflectionAPICallChecker>()
container.useImpl<JavaSyntheticScopes>() container.useImpl<JavaSyntheticScopes>()
container.useInstance(JavaSyntheticConstructorsProvider) container.useInstance(JavaSyntheticConstructorsProvider)
@@ -41,7 +41,7 @@ fun StorageComponentContainer.configureModule(
useInstance(platform) useInstance(platform)
platform.platformConfigurator.configure(this) platform.platformConfigurator.configureModuleComponents(this)
for (extension in StorageComponentContainerContributor.getInstances(moduleContext.project)) { for (extension in StorageComponentContainerContributor.getInstances(moduleContext.project)) {
extension.addDeclarations(this, platform) extension.addDeclarations(this, platform)
@@ -67,7 +67,7 @@ fun createContainerForBodyResolve(
platform: TargetPlatform, platform: TargetPlatform,
statementFilter: StatementFilter, statementFilter: StatementFilter,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): StorageComponentContainer = createContainer("BodyResolve") { ): StorageComponentContainer = createContainer("BodyResolve", platform) {
configureModule(moduleContext, platform, bindingTrace) configureModule(moduleContext, platform, bindingTrace)
useInstance(statementFilter) useInstance(statementFilter)
@@ -86,7 +86,7 @@ fun createContainerForLazyBodyResolve(
platform: TargetPlatform, platform: TargetPlatform,
bodyResolveCache: BodyResolveCache, bodyResolveCache: BodyResolveCache,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): StorageComponentContainer = createContainer("LazyBodyResolve") { ): StorageComponentContainer = createContainer("LazyBodyResolve", platform) {
configureModule(moduleContext, platform, bindingTrace) configureModule(moduleContext, platform, bindingTrace)
useInstance(LookupTracker.DO_NOTHING) useInstance(LookupTracker.DO_NOTHING)
@@ -105,7 +105,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
lookupTracker: LookupTracker, lookupTracker: LookupTracker,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
localClassDescriptorHolder: LocalClassDescriptorHolder localClassDescriptorHolder: LocalClassDescriptorHolder
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer") { ): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) {
configureModule(moduleContext, platform, bindingTrace) configureModule(moduleContext, platform, bindingTrace)
useInstance(localClassDescriptorHolder) useInstance(localClassDescriptorHolder)
@@ -132,7 +132,7 @@ fun createContainerForLazyResolve(
platform: TargetPlatform, platform: TargetPlatform,
targetEnvironment: TargetEnvironment, targetEnvironment: TargetEnvironment,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): StorageComponentContainer = createContainer("LazyResolve") { ): StorageComponentContainer = createContainer("LazyResolve", platform) {
configureModule(moduleContext, platform, bindingTrace) configureModule(moduleContext, platform, bindingTrace)
useInstance(declarationProviderFactory) useInstance(declarationProviderFactory)
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.composeContainer
import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ModuleParameters import org.jetbrains.kotlin.descriptors.ModuleParameters
@@ -45,8 +46,7 @@ abstract class TargetPlatform(
override val platformConfigurator = override val platformConfigurator =
object : PlatformConfigurator(DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(), object : PlatformConfigurator(DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(),
IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT) { IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT) {
override fun configure(container: StorageComponentContainer) { override fun configureModuleComponents(container: StorageComponentContainer) {
super.configure(container)
container.useInstance(SyntheticScopes.Empty) container.useInstance(SyntheticScopes.Empty)
container.useInstance(SyntheticConstructorsProvider.Empty) container.useInstance(SyntheticConstructorsProvider.Empty)
container.useInstance(TypeSpecificityComparator.NONE) container.useInstance(TypeSpecificityComparator.NONE)
@@ -89,17 +89,17 @@ abstract class PlatformConfigurator(
private val typeCheckers: List<AdditionalTypeChecker> = DEFAULT_TYPE_CHECKERS + additionalTypeCheckers private val typeCheckers: List<AdditionalTypeChecker> = DEFAULT_TYPE_CHECKERS + additionalTypeCheckers
private val classifierUsageCheckers: List<ClassifierUsageChecker> = DEFAULT_CLASSIFIER_USAGE_CHECKERS + additionalClassifierUsageCheckers private val classifierUsageCheckers: List<ClassifierUsageChecker> = DEFAULT_CLASSIFIER_USAGE_CHECKERS + additionalClassifierUsageCheckers
open fun configure(container: StorageComponentContainer) { abstract fun configureModuleComponents(container: StorageComponentContainer)
with (container) {
useInstance(dynamicTypesSettings) val platformSpecificContainer = composeContainer(this.javaClass.simpleName) {
declarationCheckers.forEach { useInstance(it) } useInstance(dynamicTypesSettings)
callCheckers.forEach { useInstance(it) } declarationCheckers.forEach { useInstance(it) }
typeCheckers.forEach { useInstance(it) } callCheckers.forEach { useInstance(it) }
classifierUsageCheckers.forEach { useInstance(it) } typeCheckers.forEach { useInstance(it) }
additionalAnnotationCheckers.forEach { useInstance(it) } classifierUsageCheckers.forEach { useInstance(it) }
useInstance(identifierChecker) additionalAnnotationCheckers.forEach { useInstance(it) }
useInstance(overloadFilter) useInstance(identifierChecker)
} useInstance(overloadFilter)
} }
} }
@@ -110,3 +110,7 @@ fun TargetPlatform.createModule(
builtIns: KotlinBuiltIns, builtIns: KotlinBuiltIns,
capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap() capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap()
) = ModuleDescriptorImpl(name, storageManager, defaultModuleParameters, builtIns, capabilities) ) = ModuleDescriptorImpl(name, storageManager, defaultModuleParameters, builtIns, capabilities)
fun createContainer(id: String, platform: TargetPlatform, init: StorageComponentContainer.() -> Unit)
= composeContainer(id, platform.platformConfigurator.platformSpecificContainer, init)
@@ -19,6 +19,11 @@ package org.jetbrains.kotlin.tests.di
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.* import org.jetbrains.kotlin.container.*
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.getValue
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.frontend.di.configureModule
@@ -26,12 +31,13 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.resolve.DescriptorResolver import org.jetbrains.kotlin.resolve.DescriptorResolver
import org.jetbrains.kotlin.resolve.FunctionDescriptorResolver import org.jetbrains.kotlin.resolve.FunctionDescriptorResolver
import org.jetbrains.kotlin.resolve.TypeResolver import org.jetbrains.kotlin.resolve.TypeResolver
import org.jetbrains.kotlin.resolve.createContainer
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
import org.jetbrains.kotlin.types.expressions.FakeCallResolver import org.jetbrains.kotlin.types.expressions.FakeCallResolver
fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests { fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests {
return ContainerForTests(createContainer("Tests") { return ContainerForTests(createContainer("Tests", JvmPlatform) {
configureModule(ModuleContext(module, project), JvmPlatform) configureModule(ModuleContext(module, project), JvmPlatform)
useInstance(LookupTracker.DO_NOTHING) useInstance(LookupTracker.DO_NOTHING)
useInstance(LanguageVersionSettingsImpl.DEFAULT) useInstance(LanguageVersionSettingsImpl.DEFAULT)
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.frontend.js.di package org.jetbrains.kotlin.frontend.js.di
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.container.createContainer
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.container.useInstance
@@ -28,6 +27,7 @@ import org.jetbrains.kotlin.js.resolve.JsPlatform
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.createContainer
import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl
import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
@@ -38,7 +38,7 @@ fun createTopDownAnalyzerForJs(
declarationProviderFactory: DeclarationProviderFactory, declarationProviderFactory: DeclarationProviderFactory,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): LazyTopDownAnalyzerForTopLevel { ): LazyTopDownAnalyzerForTopLevel {
val storageComponentContainer = createContainer("TopDownAnalyzerForJs") { val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) {
configureModule(moduleContext, JsPlatform, bindingTrace) configureModule(moduleContext, JsPlatform, bindingTrace)
useInstance(declarationProviderFactory) useInstance(declarationProviderFactory)
@@ -39,9 +39,7 @@ object JsPlatformConfigurator : PlatformConfigurator(
identifierChecker = IdentifierChecker.DEFAULT, identifierChecker = IdentifierChecker.DEFAULT,
overloadFilter = OverloadFilter.DEFAULT overloadFilter = OverloadFilter.DEFAULT
) { ) {
override fun configure(container: StorageComponentContainer) { override fun configureModuleComponents(container: StorageComponentContainer) {
super.configure(container)
container.useImpl<JsCallChecker>() container.useImpl<JsCallChecker>()
container.useInstance(SyntheticScopes.Empty) container.useInstance(SyntheticScopes.Empty)
container.useInstance(SyntheticConstructorsProvider.Empty) container.useInstance(SyntheticConstructorsProvider.Empty)