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()
for (implementsModuleId in implementsModuleIds) {
val compositePrefix = if (resolverCtx.models.ideaProject != gradleModule.project
&& implementsModuleId.startsWith(":")
) {
gradleModule.project.name
} else {
""
}
val targetModule = findModuleById(ideProject, compositePrefix + implementsModuleId) ?: continue
val targetModule = findModuleById(ideProject, gradleModule, implementsModuleId) ?: continue
if (useModulePerSourceSet()) {
val targetSourceSetsByName = ExternalSystemApiUtil
@@ -189,7 +181,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
ideModule.compilerArgumentsBySourceSet = gradleModel.compilerArgumentsBySourceSet
ideModule.coroutines = gradleModel.coroutines
ideModule.platformPluginId = gradleModel.platformPluginId
addImplementedModuleNames(ideModule, ideProject, gradleModel)
addImplementedModuleNames(gradleModule, ideModule, ideProject, gradleModel)
if (useModulePerSourceSet()) {
super.populateModuleDependencies(gradleModule, ideModule, ideProject)
@@ -197,11 +189,12 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
}
private fun addImplementedModuleNames(
gradleModule: IdeaModule,
dependentModule: DataNode<ModuleData>,
ideProject: DataNode<ProjectData>,
gradleModel: KotlinGradleModel
) {
val implementedModules = gradleModel.implements.mapNotNull { findModuleById(ideProject, it) }
val implementedModules = gradleModel.implements.mapNotNull { findModuleById(ideProject, gradleModule, it) }
if (useModulePerSourceSet()) {
val dependentSourceSets = dependentModule.getSourceSetsMap()
val implementedSourceSetMaps = implementedModules.map { it.getSourceSetsMap() }
@@ -226,7 +219,14 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
ideModule.createChild(ProjectKeys.MODULE_DEPENDENCY, moduleDependencyData)
}
private fun findModuleById(ideProject: DataNode<ProjectData>, moduleId: String): DataNode<ModuleData>? {
return ideProject.children.find { (it.data as? ModuleData)?.id == moduleId } as DataNode<ModuleData>?
private fun findModuleById(ideProject: DataNode<ProjectData>, gradleModule: IdeaModule, moduleId: String): 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()
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_test", "common_test", DependencyScope.COMPILE)
assertModuleModuleDepScope("js_main", "common_main", DependencyScope.COMPILE)