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 3ef759ac3a8..11598fb528b 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 @@ -16,14 +16,24 @@ import com.intellij.psi.util.CachedValueProvider import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.facet.KotlinFacetType import org.jetbrains.kotlin.idea.facet.KotlinFacetType.Companion.ID +import org.jetbrains.kotlin.idea.util.rootManager import org.jetbrains.kotlin.resolve.TargetPlatform +internal val Module.isNewMPPModule: Boolean + get() = KotlinFacet.get(this)?.configuration?.settings?.kind?.isNewMPP ?: false + val Module.implementingModules: List get() = cached(CachedValueProvider { + val moduleManager = ModuleManager.getInstance(project) CachedValueProvider.Result( - ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() }, + if (isNewMPPModule) { + moduleManager.getModuleDependentModules(this) + } else { + moduleManager.modules.filter { name in it.findOldFashionedImplementedModuleNames() } + }, ProjectRootModificationTracker.getInstance(project) ) }) @@ -31,15 +41,19 @@ val Module.implementingModules: List val Module.implementedModules: List get() = cached>( CachedValueProvider { - val modelsProvider = IdeModelsProviderImpl(project) CachedValueProvider.Result( - findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) }, + if (isNewMPPModule) { + rootManager.dependencies.toList() + } else { + val modelsProvider = IdeModelsProviderImpl(project) + findOldFashionedImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) } + }, ProjectRootModificationTracker.getInstance(project) ) } ) -private fun Module.findImplementedModuleNames(): List { +private fun Module.findOldFashionedImplementedModuleNames(): List { val facet = FacetManager.getInstance(this).findFacet( KotlinFacetType.TYPE_ID, FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 44dd61b6607..a8a05a54087 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -115,7 +115,10 @@ var CommonCompilerArguments.apiVersionView: VersionView enum class KotlinModuleKind { DEFAULT, SOURCE_SET_HOLDER, - COMPILATION_AND_SOURCE_SET_HOLDER + COMPILATION_AND_SOURCE_SET_HOLDER; + + val isNewMPP: Boolean + get() = this != DEFAULT } class KotlinFacetSettings {