PlatformConfigurator: create container for each platform (it contains static services, mostly checkers) ahead of time
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
+20
-21
@@ -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)
|
||||||
|
|||||||
+1
-3
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user