From 02c07a4a6c7d08140aac25f196bc0250c1e07f67 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Mon, 17 Jun 2019 16:55:10 +0300 Subject: [PATCH] [Resolve] Introduce an ability to get all moduleInfos without filtering by platform Previously, each ProjectResolutionFacade was tied to the respective platform, so there were no point in collection moduleInfos for all possible platforms. For composite resolution mode, we have to get all modules no matter what their platform is (because all modules will be analyzed in one facade), so this commit adds such an ability. --- .../idea/caches/project/moduleInfosFromIdeaModel.kt | 10 ++++++++-- .../idea/caches/resolve/ProjectResolutionFacade.kt | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt index 8d854f5bdd4..bdf27d81031 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt @@ -19,12 +19,16 @@ import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.types.typeUtil.closure import java.util.concurrent.ConcurrentHashMap -fun getModuleInfosFromIdeaModel(project: Project, platform: TargetPlatform): List { +/** null-platform means that we should get all modules */ +fun getModuleInfosFromIdeaModel(project: Project, platform: TargetPlatform? = null): List { val modelInfosCache = project.cacheInvalidatingOnRootModifications { collectModuleInfosFromIdeaModel(project) } - return modelInfosCache.forPlatform(platform) + return if (platform != null) + modelInfosCache.forPlatform(platform) + else + modelInfosCache.allModules() } private class IdeaModelInfosCache( @@ -39,6 +43,8 @@ private class IdeaModelInfosCache( mergePlatformModules(moduleSourceInfos, platform) + libraryInfos + sdkInfos } } + + fun allModules(): List = moduleSourceInfos + libraryInfos + sdkInfos } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt index 177a8641f63..2bfb3e21765 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt @@ -116,7 +116,8 @@ internal class ProjectResolutionFacade( projectContext ) - val allModuleInfos = (allModules ?: getModuleInfosFromIdeaModel(project, settings.platform)).toMutableSet() + val allModuleInfos = (allModules ?: getModuleInfosFromIdeaModel(project, (settings as? PlatformAnalysisSettingsImpl)?.platform)) + .toMutableSet() val syntheticFilesByModule = syntheticFiles.groupBy(KtFile::getModuleInfo) val syntheticFilesModules = syntheticFilesByModule.keys @@ -166,7 +167,7 @@ internal class ProjectResolutionFacade( }, builtIns = builtIns, delegateResolver = delegateResolverForProject, - firstDependency = settings.sdk?.let { SdkInfo(project, it) }, + firstDependency = (settings as PlatformAnalysisSettingsImpl).sdk?.let { SdkInfo(project, it) }, packageOracleFactory = ServiceManager.getService(project, IdePackageOracleFactory::class.java), invalidateOnOOCB = invalidateOnOOCB, isReleaseCoroutines = settings.isReleaseCoroutines