Fallback to M2-implementation of dependsOn in AS + M3
^KT-33809
This commit is contained in:
+36
-13
@@ -56,6 +56,12 @@ private val Module.facetSettings get() = KotlinFacet.get(this)?.configuration?.s
|
|||||||
|
|
||||||
val Module.implementingModules: List<Module>
|
val Module.implementingModules: List<Module>
|
||||||
get() = cacheInvalidatingOnRootModifications {
|
get() = cacheInvalidatingOnRootModifications {
|
||||||
|
fun Module.implementingModulesM2(moduleManager: ModuleManager): List<Module> {
|
||||||
|
return moduleManager.getModuleDependentModules(this).filter {
|
||||||
|
it.isNewMPPModule && it.externalProjectId == externalProjectId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val moduleManager = ModuleManager.getInstance(project)
|
val moduleManager = ModuleManager.getInstance(project)
|
||||||
|
|
||||||
when (facetSettings?.mppVersion) {
|
when (facetSettings?.mppVersion) {
|
||||||
@@ -63,13 +69,19 @@ val Module.implementingModules: List<Module>
|
|||||||
|
|
||||||
KotlinMultiplatformVersion.M3 -> {
|
KotlinMultiplatformVersion.M3 -> {
|
||||||
val thisModuleStableName = stableModuleName
|
val thisModuleStableName = stableModuleName
|
||||||
|
val result = mutableSetOf<Module>()
|
||||||
|
moduleManager.modules.filterTo(result) { it.facetSettings?.dependsOnModuleNames?.contains(thisModuleStableName) == true }
|
||||||
|
|
||||||
moduleManager.modules.filter { it.facetSettings?.dependsOnModuleNames?.contains(thisModuleStableName) == true }
|
// HACK: we do not import proper dependsOn for android source-sets in M3,
|
||||||
|
// so add all Android modules that M2-implemention would've added,
|
||||||
|
// to at least not make things worse.
|
||||||
|
// See KT-33809 for details
|
||||||
|
implementingModulesM2(moduleManager).forEach { if (it !in result && it.isAndroidModule()) result += it }
|
||||||
|
|
||||||
|
result.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinMultiplatformVersion.M2 -> moduleManager.getModuleDependentModules(this).filter {
|
KotlinMultiplatformVersion.M2 -> implementingModulesM2(moduleManager)
|
||||||
it.isNewMPPModule && it.externalProjectId == externalProjectId
|
|
||||||
}
|
|
||||||
|
|
||||||
KotlinMultiplatformVersion.M1 -> moduleManager.modules.filter { name in it.findOldFashionedImplementedModuleNames() }
|
KotlinMultiplatformVersion.M1 -> moduleManager.modules.filter { name in it.findOldFashionedImplementedModuleNames() }
|
||||||
}
|
}
|
||||||
@@ -90,24 +102,35 @@ private val Project.modulesByLinkedKey: Map<String, Module>
|
|||||||
|
|
||||||
val Module.implementedModules: List<Module>
|
val Module.implementedModules: List<Module>
|
||||||
get() = cacheInvalidatingOnRootModifications {
|
get() = cacheInvalidatingOnRootModifications {
|
||||||
|
fun Module.implementedModulesM2(): List<Module> {
|
||||||
|
return rootManager.dependencies.filter {
|
||||||
|
// TODO: remove additional android check
|
||||||
|
it.isNewMPPModule &&
|
||||||
|
it.platform.isCommon() &&
|
||||||
|
it.externalProjectId == externalProjectId &&
|
||||||
|
(isAndroidModule() || it.isTestModule == isTestModule)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val facetSettings = facetSettings
|
val facetSettings = facetSettings
|
||||||
when (facetSettings?.mppVersion) {
|
when (facetSettings?.mppVersion) {
|
||||||
null -> emptyList()
|
null -> emptyList()
|
||||||
|
|
||||||
KotlinMultiplatformVersion.M3 -> {
|
KotlinMultiplatformVersion.M3 -> {
|
||||||
facetSettings.dependsOnModuleNames.mapNotNull {
|
if (isAndroidModule()) {
|
||||||
project.modulesByLinkedKey[it]
|
// HACK: we do not import proper dependsOn for android source-sets in M3, so fallback to M2-impl
|
||||||
|
// to at least not make things worse.
|
||||||
|
// See KT-33809 for details
|
||||||
|
implementedModulesM2()
|
||||||
|
} else {
|
||||||
|
facetSettings.dependsOnModuleNames.mapNotNull {
|
||||||
|
project.modulesByLinkedKey[it]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinMultiplatformVersion.M2 -> {
|
KotlinMultiplatformVersion.M2 -> {
|
||||||
rootManager.dependencies.filter {
|
implementedModulesM2()
|
||||||
// TODO: remove additional android check
|
|
||||||
it.isNewMPPModule &&
|
|
||||||
it.platform.isCommon() &&
|
|
||||||
it.externalProjectId == externalProjectId &&
|
|
||||||
(isAndroidModule() || it.isTestModule == isTestModule)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinMultiplatformVersion.M1 -> {
|
KotlinMultiplatformVersion.M1 -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user