Simplify return types of createContainer* functions

This commit is contained in:
Alexander Udalov
2016-09-26 18:55:35 +03:00
parent 9cfe0be98e
commit 0250ea861c
7 changed files with 33 additions and 42 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.repl.di.createContainerForReplWithJava import org.jetbrains.kotlin.cli.jvm.repl.di.createContainerForReplWithJava
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.data.KtClassLikeInfo import org.jetbrains.kotlin.resolve.lazy.data.KtClassLikeInfo
@@ -60,19 +62,18 @@ class CliReplAnalyzerEngine(environment: KotlinCoreEnvironment) {
JvmPackagePartProvider(environment) JvmPackagePartProvider(environment)
) )
this.resolveSession = container.get<ResolveSession>()
this.topDownAnalysisContext = TopDownAnalysisContext( this.topDownAnalysisContext = TopDownAnalysisContext(
TopDownAnalysisMode.LocalDeclarations, DataFlowInfoFactory.EMPTY, container.resolveSession.declarationScopeProvider TopDownAnalysisMode.LocalDeclarations, DataFlowInfoFactory.EMPTY, resolveSession.declarationScopeProvider
) )
this.topDownAnalyzer = container.lazyTopDownAnalyzerForTopLevel this.topDownAnalyzer = container.get<LazyTopDownAnalyzerForTopLevel>()
this.resolveSession = container.resolveSession
moduleContext.initializeModuleContents(CompositePackageFragmentProvider( moduleContext.initializeModuleContents(CompositePackageFragmentProvider(
listOf( listOf(
container.resolveSession.packageFragmentProvider, resolveSession.packageFragmentProvider,
container.javaDescriptorResolver.packageFragmentProvider container.get<JavaDescriptorResolver>().packageFragmentProvider
) )
)) ))
} }
interface ReplLineAnalysisResult { interface ReplLineAnalysisResult {
@@ -18,8 +18,7 @@ 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.StorageComponentContainer import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.getValue
import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
@@ -32,11 +31,8 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
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.createContainer import org.jetbrains.kotlin.resolve.createContainer
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.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
fun createContainerForReplWithJava( fun createContainerForReplWithJava(
@@ -45,7 +41,7 @@ fun createContainerForReplWithJava(
declarationProviderFactory: DeclarationProviderFactory, declarationProviderFactory: DeclarationProviderFactory,
moduleContentScope: GlobalSearchScope, moduleContentScope: GlobalSearchScope,
packagePartProvider: PackagePartProvider packagePartProvider: PackagePartProvider
): ContainerForReplWithJava = createContainer("ReplWithJava", JvmPlatform) { ): ComponentProvider = 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)
@@ -55,15 +51,7 @@ fun createContainerForReplWithJava(
CompilerEnvironment.configure(this) CompilerEnvironment.configure(this)
useImpl<SingleModuleClassResolver>() useImpl<SingleModuleClassResolver>()
}.let { }.apply {
it.javaAnalysisInit() javaAnalysisInit()
it.initJvmBuiltInsForTopDownAnalysis() initJvmBuiltInsForTopDownAnalysis()
ContainerForReplWithJava(it)
}
class ContainerForReplWithJava(container: StorageComponentContainer) {
val resolveSession: ResolveSession by container
val lazyTopDownAnalyzerForTopLevel: LazyTopDownAnalyzerForTopLevel by container
val javaDescriptorResolver: JavaDescriptorResolver by container
} }
@@ -115,7 +115,7 @@ fun createContainerForTopDownAnalyzerForJvm(
lookupTracker: LookupTracker, lookupTracker: LookupTracker,
packagePartProvider: PackagePartProvider, packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings languageVersionSettings: LanguageVersionSettings
): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm", JvmPlatform) { ): ComponentProvider = createContainer("TopDownAnalyzerForJvm", JvmPlatform) {
useInstance(packagePartProvider) useInstance(packagePartProvider)
configureModule(moduleContext, JvmPlatform, bindingTrace) configureModule(moduleContext, JvmPlatform, bindingTrace)
@@ -126,11 +126,9 @@ fun createContainerForTopDownAnalyzerForJvm(
CompilerEnvironment.configure(this) CompilerEnvironment.configure(this)
useImpl<SingleModuleClassResolver>() useImpl<SingleModuleClassResolver>()
}.let { }.apply {
it.javaAnalysisInit() javaAnalysisInit()
it.initJvmBuiltInsForTopDownAnalysis() initJvmBuiltInsForTopDownAnalysis()
ContainerForTopDownAnalyzerForJvm(it)
} }
fun StorageComponentContainer.javaAnalysisInit() { fun StorageComponentContainer.javaAnalysisInit() {
@@ -144,9 +142,3 @@ fun StorageComponentContainer.initJvmBuiltInsForTopDownAnalysis() {
get<JvmBuiltIns>().initialize(get<ModuleDescriptor>(), get<JvmBuiltIns>().initialize(get<ModuleDescriptor>(),
get<LanguageVersionSettings>().supportsFeature(LanguageFeature.AdditionalBuiltInsMembers)) get<LanguageVersionSettings>().supportsFeature(LanguageFeature.AdditionalBuiltInsMembers))
} }
class ContainerForTopDownAnalyzerForJvm(container: StorageComponentContainer) {
val lazyTopDownAnalyzerForTopLevel: LazyTopDownAnalyzerForTopLevel by container
val javaDescriptorResolver: JavaDescriptorResolver by container
val deserializationComponentsForJava: DeserializationComponentsForJava by container
}
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.ContextForNewModule import org.jetbrains.kotlin.context.ContextForNewModule
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.MutableModuleContext import org.jetbrains.kotlin.context.MutableModuleContext
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.modules.TargetId
@@ -38,6 +40,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.platform.JvmBuiltIns
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
import org.jetbrains.kotlin.resolve.TopDownAnalysisMode import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
@@ -77,19 +80,19 @@ object TopDownAnalyzerFacadeForJVM {
if (incrementalComponents != null) { if (incrementalComponents != null) {
targetIds?.mapTo(additionalProviders) { targetId -> targetIds?.mapTo(additionalProviders) { targetId ->
IncrementalPackageFragmentProvider( IncrementalPackageFragmentProvider(
files, module, storageManager, container.deserializationComponentsForJava.components, files, module, storageManager, container.get<DeserializationComponentsForJava>().components,
incrementalComponents.getIncrementalCache(targetId), targetId incrementalComponents.getIncrementalCache(targetId), targetId
) )
} }
} }
additionalProviders.add(container.javaDescriptorResolver.packageFragmentProvider) additionalProviders.add(container.get<JavaDescriptorResolver>().packageFragmentProvider)
PackageFragmentProviderExtension.getInstances(project).mapNotNullTo(additionalProviders) { extension -> PackageFragmentProviderExtension.getInstances(project).mapNotNullTo(additionalProviders) { extension ->
extension.getPackageFragmentProvider(project, module, storageManager, trace, null) extension.getPackageFragmentProvider(project, module, storageManager, trace, null)
} }
container.lazyTopDownAnalyzerForTopLevel.analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, additionalProviders) container.get<LazyTopDownAnalyzerForTopLevel>().analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, additionalProviders)
for (extension in AnalysisCompletedHandlerExtension.getInstances(project)) { for (extension in AnalysisCompletedHandlerExtension.getInstances(project)) {
val result = extension.analysisCompleted(project, module, trace, files) val result = extension.analysisCompleted(project, module, trace, files)
@@ -20,6 +20,7 @@ import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
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.descriptors.resolveClassByFqName import org.jetbrains.kotlin.descriptors.resolveClassByFqName
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.load.kotlin.computeJvmDescriptor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.platform.JvmBuiltIns
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyPublicApi import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyPublicApi
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
@@ -58,7 +60,7 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
LanguageVersionSettingsImpl.DEFAULT LanguageVersionSettingsImpl.DEFAULT
) )
emptyModule.initialize(container.javaDescriptorResolver.packageFragmentProvider) emptyModule.initialize(container.get<JavaDescriptorResolver>().packageFragmentProvider)
emptyModule.setDependencies(emptyModule) emptyModule.setDependencies(emptyModule)
val blackList = val blackList =
@@ -22,12 +22,15 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil
import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.load.java.structure.reflect.classId import org.jetbrains.kotlin.load.java.structure.reflect.classId
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.test.* import org.jetbrains.kotlin.test.*
@@ -63,9 +66,9 @@ abstract class AbstractLocalClassProtoTest : TestCaseWithTmpdir() {
providerFactory, GlobalSearchScope.allScope(environment.project), LookupTracker.DO_NOTHING, PackagePartProvider.EMPTY, providerFactory, GlobalSearchScope.allScope(environment.project), LookupTracker.DO_NOTHING, PackagePartProvider.EMPTY,
LanguageVersionSettingsImpl.DEFAULT LanguageVersionSettingsImpl.DEFAULT
) )
moduleContext.initializeModuleContents(container.javaDescriptorResolver.packageFragmentProvider) moduleContext.initializeModuleContents(container.get<JavaDescriptorResolver>().packageFragmentProvider)
val components = container.deserializationComponentsForJava.components val components = container.get<DeserializationComponentsForJava>().components
val classDescriptor = components.classDeserializer.deserializeClass(clazz.classId) val classDescriptor = components.classDeserializer.deserializeClass(clazz.classId)
?: error("Class is not resolved: $clazz (classId = ${clazz.classId})") ?: error("Class is not resolved: $clazz (classId = ${clazz.classId})")
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns.*
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
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.java.di.createContainerForTopDownAnalyzerForJvm import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.platform.JvmBuiltIns
import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererModifier import org.jetbrains.kotlin.renderer.DescriptorRendererModifier
import org.jetbrains.kotlin.renderer.OverrideRenderingPolicy import org.jetbrains.kotlin.renderer.OverrideRenderingPolicy
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.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -66,7 +68,7 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment()
LanguageVersionSettingsImpl.DEFAULT LanguageVersionSettingsImpl.DEFAULT
) )
emptyModule.initialize(container.javaDescriptorResolver.packageFragmentProvider) emptyModule.initialize(container.get<JavaDescriptorResolver>().packageFragmentProvider)
emptyModule.setDependencies(emptyModule) emptyModule.setDependencies(emptyModule)
val packageFragmentProvider = emptyModule.builtIns.builtInsModule.packageFragmentProvider val packageFragmentProvider = emptyModule.builtIns.builtInsModule.packageFragmentProvider