diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index 2db50ff0fae..8e375d9f4ae 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -136,7 +136,7 @@ interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo { sealed class ModuleSourceInfoWithExpectedBy(private val forProduction: Boolean) : ModuleSourceInfo { override val expectedBy: List get() { - val expectedByModules = module.findImplementedModules() + val expectedByModules = module.implementedModules return expectedByModules.mapNotNull { if (forProduction) it.productionSourceInfo() else it.testSourceInfo() } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt index 6f0c5167d5a..5023469d8e5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt @@ -18,26 +18,24 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.idea.facet.KotlinFacetType import org.jetbrains.kotlin.idea.facet.KotlinFacetType.Companion.ID -fun Module.findImplementingModules() = - ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() } - val Module.implementingModules: List get() = cached(CachedValueProvider { CachedValueProvider.Result( - findImplementingModules(), - ProjectRootModificationTracker.getInstance(project) + ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() }, + ProjectRootModificationTracker.getInstance(project) ) }) -private fun Module.getModuleInfo(baseModuleSourceInfo: ModuleSourceInfo): ModuleSourceInfo? = - when (baseModuleSourceInfo) { - is ModuleProductionSourceInfo -> productionSourceInfo() - is ModuleTestSourceInfo -> testSourceInfo() - else -> null - } - -private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo) = - findImplementingModules().mapNotNull { it.getModuleInfo(moduleSourceInfo) } +val Module.implementedModules: List + get() = cached>( + CachedValueProvider { + val modelsProvider = IdeModelsProviderImpl(project) + CachedValueProvider.Result( + findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) }, + ProjectRootModificationTracker.getInstance(project) + ) + } + ) val ModuleDescriptor.implementingDescriptors: List get() { @@ -48,7 +46,7 @@ val ModuleDescriptor.implementingDescriptors: List val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return emptyList() val module = moduleSourceInfo.module return module.cached(CachedValueProvider { - val implementingModuleInfos = module.findImplementingModuleInfos(moduleSourceInfo) + val implementingModuleInfos = module.findImplementingModuleInfos(moduleSourceInfo.isTests()) val implementingModuleDescriptors = implementingModuleInfos.mapNotNull { KotlinCacheService.getInstance(module.project).getResolutionFacadeByModuleInfo(it, it.platform)?.moduleDescriptor } @@ -60,6 +58,13 @@ val ModuleDescriptor.implementingDescriptors: List }) } + +private fun Module.findImplementingModuleInfos(isTests: Boolean) = + implementingModules.mapNotNull { it.toInfo(isTests) } + +private fun Module.toInfo(isTests: Boolean): ModuleSourceInfo? = + if (isTests) testSourceInfo() else productionSourceInfo() + val ModuleDescriptor.implementedDescriptors: List get() { val moduleInfo = getCapability(ModuleInfo.Capability) @@ -80,13 +85,3 @@ fun Module.findImplementedModuleNames(): List { ) return facet?.configuration?.settings?.implementedModuleNames ?: emptyList() } - -fun Module.findImplementedModules() = this.cached>( - CachedValueProvider { - val modelsProvider = IdeModelsProviderImpl(project) - CachedValueProvider.Result( - findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) }, - ProjectRootModificationTracker.getInstance(project) - ) - } -)