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()
|
||||
|
||||
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>?
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user