diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index 8521d20ad25..a96dd1facc3 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -49,8 +49,8 @@ var DataNode.coroutines by UserDataProperty(Key.create("KOTLIN_COROUTINES")) var DataNode.platformPluginId by UserDataProperty(Key.create("PLATFORM_PLUGIN_ID")) -var DataNode.implementedModule - by UserDataProperty(Key.create>("IMPLEMENTS")) +var DataNode.implementedModuleName + by UserDataProperty(Key.create("IMPLEMENTED_MODULE_NAME")) class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() { override fun getToolingExtensionsClasses(): Set> { @@ -167,11 +167,33 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() ideModule.compilerArgumentsBySourceSet = gradleModel.compilerArgumentsBySourceSet ideModule.coroutines = gradleModel.coroutines ideModule.platformPluginId = gradleModel.platformPluginId - ideModule.implementedModule = gradleModel.implements?.let { findModule(ideProject, it) } + addImplementedModuleNames(ideModule, ideProject, gradleModel) super.populateModuleDependencies(gradleModule, ideModule, ideProject) } + private fun addImplementedModuleNames( + dependentModule: DataNode, + ideProject: DataNode, + gradleModel: KotlinGradleModel + ) { + val implementedModule = gradleModel.implements?.let { findModule(ideProject, it) } ?: return + if (resolverCtx.isResolveModulePerSourceSet) { + val dependentSourceSets = dependentModule.getSourceSetsMap() + val implementedSourceSets = implementedModule.getSourceSetsMap() + for ((sourceSetName, dependentSourceSet) in dependentSourceSets) { + val implementedSourceSet = implementedSourceSets[sourceSetName] ?: continue + dependentSourceSet.implementedModuleName = implementedSourceSet.data.internalName + } + } + else { + dependentModule.implementedModuleName = implementedModule.data.internalName + } + } + + private fun DataNode.getSourceSetsMap() = + ExternalSystemApiUtil.getChildren(this, GradleSourceSetData.KEY).associateBy { it.sourceSetName } + private val DataNode.sourceSetName get() = (data as? GradleSourceSetData)?.id?.substringAfterLast(':') diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index a3fa375365b..7e16bf3eca3 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -208,7 +208,7 @@ private fun configureFacetByGradleModule( } with(kotlinFacet.configuration.settings) { - implementedModuleName = getImplementedModuleName(moduleNode, sourceSetName) + implementedModuleName = (sourceSetNode ?: moduleNode).implementedModuleName testOutputPath = getExplicitTestOutputPath(moduleNode, platformKind) } @@ -221,13 +221,6 @@ private fun getExplicitTestOutputPath(moduleNode: DataNode, platform return K2JSCompilerArguments().apply { parseCommandLineArguments(k2jsArgumentList, this) }.outputFile } -private fun getImplementedModuleName(moduleNode: DataNode, sourceSetName: String?): String? { - val baseModuleName = moduleNode.implementedModule?.data?.internalName - if (baseModuleName == null || sourceSetName == null) return baseModuleName - val delimiter = if(isQualifiedModuleNamesEnabled()) "." else "_" - return "$baseModuleName$delimiter$sourceSetName" -} - private fun adjustClasspath(kotlinFacet: KotlinFacet, dependencyClasspath: List) { if (dependencyClasspath.isEmpty()) return val arguments = kotlinFacet.configuration.settings.compilerArguments as? K2JVMCompilerArguments ?: return