[FE] Allow explicitly specify dependent modules fin TopDownAnalyzerFacade

This commit is contained in:
Dmitriy Novozhilov
2020-12-02 16:32:38 +03:00
parent c8f3a4802e
commit 35437e6da9
@@ -90,11 +90,12 @@ object TopDownAnalyzerFacadeForJVM {
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider, packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
declarationProviderFactory: (StorageManager, Collection<KtFile>) -> DeclarationProviderFactory = ::FileBasedDeclarationProviderFactory, declarationProviderFactory: (StorageManager, Collection<KtFile>) -> DeclarationProviderFactory = ::FileBasedDeclarationProviderFactory,
sourceModuleSearchScope: GlobalSearchScope = newModuleSearchScope(project, files), sourceModuleSearchScope: GlobalSearchScope = newModuleSearchScope(project, files),
klibList: List<KotlinLibrary> = emptyList() klibList: List<KotlinLibrary> = emptyList(),
explicitModuleDependencyList: List<ModuleDescriptorImpl> = emptyList()
): AnalysisResult { ): AnalysisResult {
val container = createContainer( val container = createContainer(
project, files, trace, configuration, packagePartProvider, declarationProviderFactory, CompilerEnvironment, project, files, trace, configuration, packagePartProvider, declarationProviderFactory, CompilerEnvironment,
sourceModuleSearchScope, klibList sourceModuleSearchScope, klibList, explicitModuleDependencyList = explicitModuleDependencyList
) )
val module = container.get<ModuleDescriptor>() val module = container.get<ModuleDescriptor>()
@@ -127,6 +128,7 @@ object TopDownAnalyzerFacadeForJVM {
return AnalysisResult.success(trace.bindingContext, module) return AnalysisResult.success(trace.bindingContext, module)
} }
@OptIn(ExperimentalStdlibApi::class)
fun createContainer( fun createContainer(
project: Project, project: Project,
files: Collection<KtFile>, files: Collection<KtFile>,
@@ -137,7 +139,8 @@ object TopDownAnalyzerFacadeForJVM {
targetEnvironment: TargetEnvironment = CompilerEnvironment, targetEnvironment: TargetEnvironment = CompilerEnvironment,
sourceModuleSearchScope: GlobalSearchScope = newModuleSearchScope(project, files), sourceModuleSearchScope: GlobalSearchScope = newModuleSearchScope(project, files),
klibList: List<KotlinLibrary> = emptyList(), klibList: List<KotlinLibrary> = emptyList(),
implicitsResolutionFilter: ImplicitsExtensionsResolutionFilter? = null implicitsResolutionFilter: ImplicitsExtensionsResolutionFilter? = null,
explicitModuleDependencyList: List<ModuleDescriptorImpl> = emptyList()
): ComponentProvider { ): ComponentProvider {
val jvmTarget = configuration.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT) val jvmTarget = configuration.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT)
val languageVersionSettings = configuration.languageVersionSettings val languageVersionSettings = configuration.languageVersionSettings
@@ -252,8 +255,16 @@ object TopDownAnalyzerFacadeForJVM {
val klibModules = getKlibModules(klibList, dependencyModule) val klibModules = getKlibModules(klibList, dependencyModule)
// TODO: remove dependencyModule from friends // TODO: remove dependencyModule from friends
val dependencies = buildList {
add(module)
dependencyModule?.let { add(it) }
add(fallbackBuiltIns)
addAll(klibModules)
@Suppress("UNCHECKED_CAST")
addAll(explicitModuleDependencyList)
}
module.setDependencies( module.setDependencies(
listOfNotNull(module, dependencyModule, fallbackBuiltIns) + klibModules, dependencies,
if (dependencyModule != null) setOf(dependencyModule) else emptySet() if (dependencyModule != null) setOf(dependencyModule) else emptySet()
) )
module.initialize( module.initialize(