Idea gradle: proper support for composite MPP projects
(cherry picked from commit ca841f0) #KT-24748 fixed
This commit is contained in:
+13
-13
@@ -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>?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user