From 2c6fbb6ece0671036fe9ca36b6dad133c0d65fa7 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Thu, 17 Oct 2019 14:26:08 +0300 Subject: [PATCH] Fix dependsOn module names Use Gradle Project IDs instead of names, because for composite Gradle builds module names are appended with some additional prefixes, which causes mismatch --- .../idea/caches/project/multiplatformUtil.kt | 27 ++++++++++++++++--- .../KotlinMPPGradleProjectResolver.kt | 5 +++- 2 files changed, 28 insertions(+), 4 deletions(-) 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 27733e97fc6..a36b8393285 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 @@ -7,9 +7,12 @@ package org.jetbrains.kotlin.idea.caches.project import com.intellij.facet.FacetManager import com.intellij.facet.FacetTypeRegistry +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.externalSystem.service.project.IdeModelsProviderImpl import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications @@ -58,7 +61,11 @@ val Module.implementingModules: List when (facetSettings?.mppVersion) { null -> emptyList() - KotlinMultiplatformVersion.M3 -> moduleManager.modules.filter { it.facetSettings?.dependsOnModuleNames?.contains(name) == true } + KotlinMultiplatformVersion.M3 -> { + val thisModuleStableName = stableModuleName + + moduleManager.modules.filter { it.facetSettings?.dependsOnModuleNames?.contains(thisModuleStableName) == true } + } KotlinMultiplatformVersion.M2 -> moduleManager.getModuleDependentModules(this).filter { it.isNewMPPModule && it.externalProjectId == externalProjectId @@ -68,6 +75,19 @@ val Module.implementingModules: List } } +private val Module.stableModuleName: String + get() = ExternalSystemModulePropertyManager.getInstance(this).getLinkedProjectId() + ?: name.also { + if (!ApplicationManager.getApplication().isUnitTestMode) LOG.error("Don't have a LinkedProjectId for module $this for HMPP!") + } + +private val Project.modulesByLinkedKey: Map + get() = cacheInvalidatingOnRootModifications { + val moduleManager = ModuleManager.getInstance(this) + + moduleManager.modules.associateBy { it.stableModuleName } + } + val Module.implementedModules: List get() = cacheInvalidatingOnRootModifications { val facetSettings = facetSettings @@ -75,8 +95,9 @@ val Module.implementedModules: List null -> emptyList() KotlinMultiplatformVersion.M3 -> { - val modelsProvider = IdeModelsProviderImpl(project) - facetSettings.dependsOnModuleNames.mapNotNull { modelsProvider.findIdeModule(it) } + facetSettings.dependsOnModuleNames.mapNotNull { + project.modulesByLinkedKey[it] + } } KotlinMultiplatformVersion.M2 -> { diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt index 3481bdd90b7..7f16dd378e8 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.config.ExternalSystemTestTask import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.gradle.* import org.jetbrains.kotlin.idea.configuration.GradlePropertiesFileFacade.Companion.KOTLIN_NOT_IMPORTED_COMMON_SOURCE_SETS_SETTING +import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver.Companion.fullName import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling import org.jetbrains.kotlin.util.removeSuffixIfPresent import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult @@ -868,7 +869,9 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { info.gradleModuleId = getModuleId(resolverCtx, gradleModule) info.actualPlatforms.addSimplePlatforms(sourceSet.actualPlatforms.platforms) info.isTestModule = sourceSet.isTestModule - info.dependsOn = sourceSet.dependsOnSourceSets.toList().map { gradleModule.name + "_" + it } + info.dependsOn = sourceSet.dependsOnSourceSets.toList().map { + getModuleId(resolverCtx, gradleModule) + ":" + it + } //TODO(auskov): target flours are lost here info.compilerArguments = createCompilerArguments(emptyList(), sourceSet.actualPlatforms.getSinglePlatform()).also { it.multiPlatform = true