Idea gradle: proper support for composite MPP projects

(cherry picked from commit ca841f0)

#KT-24748 fixed
This commit is contained in:
Sergey Rostov
2018-06-05 15:57:31 +03:00
parent 80ed963f97
commit f86c6db4bf
2 changed files with 19 additions and 13 deletions
@@ -146,15 +146,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
?: emptyList() ?: emptyList()
for (implementsModuleId in implementsModuleIds) { for (implementsModuleId in implementsModuleIds) {
val compositePrefix = if (resolverCtx.models.ideaProject != gradleModule.project val targetModule = findModuleById(ideProject, gradleModule, implementsModuleId) ?: continue
&& implementsModuleId.startsWith(":")
) {
gradleModule.project.name
} else {
""
}
val targetModule = findModuleById(ideProject, compositePrefix + implementsModuleId) ?: continue
if (useModulePerSourceSet()) { if (useModulePerSourceSet()) {
val targetSourceSetsByName = ExternalSystemApiUtil val targetSourceSetsByName = ExternalSystemApiUtil
@@ -189,7 +181,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
ideModule.compilerArgumentsBySourceSet = gradleModel.compilerArgumentsBySourceSet ideModule.compilerArgumentsBySourceSet = gradleModel.compilerArgumentsBySourceSet
ideModule.coroutines = gradleModel.coroutines ideModule.coroutines = gradleModel.coroutines
ideModule.platformPluginId = gradleModel.platformPluginId ideModule.platformPluginId = gradleModel.platformPluginId
addImplementedModuleNames(ideModule, ideProject, gradleModel) addImplementedModuleNames(gradleModule, ideModule, ideProject, gradleModel)
if (useModulePerSourceSet()) { if (useModulePerSourceSet()) {
super.populateModuleDependencies(gradleModule, ideModule, ideProject) super.populateModuleDependencies(gradleModule, ideModule, ideProject)
@@ -197,11 +189,12 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
} }
private fun addImplementedModuleNames( private fun addImplementedModuleNames(
gradleModule: IdeaModule,
dependentModule: DataNode<ModuleData>, dependentModule: DataNode<ModuleData>,
ideProject: DataNode<ProjectData>, ideProject: DataNode<ProjectData>,
gradleModel: KotlinGradleModel gradleModel: KotlinGradleModel
) { ) {
val implementedModules = gradleModel.implements.mapNotNull { findModuleById(ideProject, it) } val implementedModules = gradleModel.implements.mapNotNull { findModuleById(ideProject, gradleModule, it) }
if (useModulePerSourceSet()) { if (useModulePerSourceSet()) {
val dependentSourceSets = dependentModule.getSourceSetsMap() val dependentSourceSets = dependentModule.getSourceSetsMap()
val implementedSourceSetMaps = implementedModules.map { it.getSourceSetsMap() } val implementedSourceSetMaps = implementedModules.map { it.getSourceSetsMap() }
@@ -226,7 +219,14 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
ideModule.createChild(ProjectKeys.MODULE_DEPENDENCY, moduleDependencyData) ideModule.createChild(ProjectKeys.MODULE_DEPENDENCY, moduleDependencyData)
} }
private fun findModuleById(ideProject: DataNode<ProjectData>, moduleId: String): DataNode<ModuleData>? { private fun findModuleById(ideProject: DataNode<ProjectData>, gradleModule: IdeaModule, moduleId: String): DataNode<ModuleData>? {
return ideProject.children.find { (it.data as? ModuleData)?.id == moduleId } as DataNode<ModuleData>? val isCompositeProject = resolverCtx.models.ideaProject != gradleModule.project
val compositePrefix =
if (isCompositeProject && moduleId.startsWith(":")) gradleModule.project.name
else ""
val fullModuleId = compositePrefix + moduleId
return ideProject.children.find { (it.data as? ModuleData)?.id == fullModuleId } as DataNode<ModuleData>?
} }
} }
@@ -198,6 +198,12 @@ class MultiplatformProjectImportingTest : GradleImportingTestCase() {
) )
importProject() importProject()
TestCase.assertEquals(listOf("common_main"), facetSettings("jvm_main").implementedModuleNames)
TestCase.assertEquals(listOf("common_test"), facetSettings("jvm_test").implementedModuleNames)
TestCase.assertEquals(listOf("common_main"), facetSettings("js_main").implementedModuleNames)
TestCase.assertEquals(listOf("common_test"), facetSettings("js_test").implementedModuleNames)
assertModuleModuleDepScope("jvm_main", "common_main", DependencyScope.COMPILE) assertModuleModuleDepScope("jvm_main", "common_main", DependencyScope.COMPILE)
assertModuleModuleDepScope("jvm_test", "common_test", DependencyScope.COMPILE) assertModuleModuleDepScope("jvm_test", "common_test", DependencyScope.COMPILE)
assertModuleModuleDepScope("js_main", "common_main", DependencyScope.COMPILE) assertModuleModuleDepScope("js_main", "common_main", DependencyScope.COMPILE)