Deduplicate logic of computing orphan source sets in MPP Gradle Import
Set of compiled source sets is already available in MultiplatformModelImportingContext via 'sourceSetsToParticipatedCompilations.keys', no need to recompute it ^KT-37127
This commit is contained in:
@@ -84,15 +84,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
|||||||
): Map<String, KotlinSourceSetImpl> {
|
): Map<String, KotlinSourceSetImpl> {
|
||||||
if (importingContext.getProperty(IMPORT_ORPHAN_SOURCE_SETS)) return importingContext.sourceSetsByNames
|
if (importingContext.getProperty(IMPORT_ORPHAN_SOURCE_SETS)) return importingContext.sourceSetsByNames
|
||||||
|
|
||||||
// TODO: similar to importingContext.sourceSetsByCompilations.keys, will be deduplicated in further commits
|
val (orphanSourceSets, nonOrphanSourceSets) = importingContext.sourceSets.partition { importingContext.isOrphanSourceSet(it) }
|
||||||
val compiledSourceSets: Collection<String> =
|
|
||||||
importingContext.targets
|
|
||||||
.flatMap { it.compilations }
|
|
||||||
.flatMap { it.sourceSets }
|
|
||||||
.flatMap { it.dependsOnSourceSets.union(listOf(it.name)) }
|
|
||||||
.distinct()
|
|
||||||
|
|
||||||
val (orphanSourceSets, nonOrphanSourceSets) = importingContext.sourceSets.partition { !compiledSourceSets.contains(it.name) }
|
|
||||||
|
|
||||||
orphanSourceSets.forEach {
|
orphanSourceSets.forEach {
|
||||||
logger.warn("[sync warning] Source set \"${it.name}\" is not compiled with any compilation. This source set is not imported in the IDE.")
|
logger.warn("[sync warning] Source set \"${it.name}\" is not compiled with any compilation. This source set is not imported in the IDE.")
|
||||||
|
|||||||
@@ -18,11 +18,24 @@ internal interface MultiplatformModelImportingContext {
|
|||||||
val targets: Collection<KotlinTarget>
|
val targets: Collection<KotlinTarget>
|
||||||
val compilations: Collection<KotlinCompilation>
|
val compilations: Collection<KotlinCompilation>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All source sets in a project, including those that are created but not included into any compilations
|
||||||
|
* (so-called "orphan" source sets). Use [isOrphanSourceSet] to get only compiled source sets
|
||||||
|
*/
|
||||||
val sourceSets: Collection<KotlinSourceSetImpl>
|
val sourceSets: Collection<KotlinSourceSetImpl>
|
||||||
val sourceSetsByNames: Map<String, KotlinSourceSetImpl>
|
val sourceSetsByNames: Map<String, KotlinSourceSetImpl>
|
||||||
|
|
||||||
fun sourceSetByName(name: String): KotlinSourceSet?
|
fun sourceSetByName(name: String): KotlinSourceSet?
|
||||||
fun compilationsBySourceSet(sourceSet: KotlinSourceSet): Collection<KotlinCompilation>?
|
fun compilationsBySourceSet(sourceSet: KotlinSourceSet): Collection<KotlinCompilation>?
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "Orphan" is a source set which is not actually compiled by the compiler, i.e. the one
|
||||||
|
* which doesn't belong to any [KotlinCompilation].
|
||||||
|
*
|
||||||
|
* Orphan source sets might appear if one creates a source-set manually and doesn't link
|
||||||
|
* it anywhere (essentially this is a misconfiguration)
|
||||||
|
*/
|
||||||
|
fun isOrphanSourceSet(sourceSet: KotlinSourceSet): Boolean = compilationsBySourceSet(sourceSet) == null
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun MultiplatformModelImportingContext.getProperty(property: GradleImportProperties): Boolean = project.getProperty(property)
|
internal fun MultiplatformModelImportingContext.getProperty(property: GradleImportProperties): Boolean = project.getProperty(property)
|
||||||
@@ -99,6 +112,9 @@ internal class MultiplatformModelImportingContextImpl(override val project: Proj
|
|||||||
this.targets = targets
|
this.targets = targets
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// overload for small optimization
|
||||||
|
override fun isOrphanSourceSet(sourceSet: KotlinSourceSet): Boolean = sourceSet in sourceSetToParticipatedCompilations.keys
|
||||||
|
|
||||||
override fun compilationsBySourceSet(sourceSet: KotlinSourceSet): Collection<KotlinCompilation>? =
|
override fun compilationsBySourceSet(sourceSet: KotlinSourceSet): Collection<KotlinCompilation>? =
|
||||||
sourceSetToParticipatedCompilations[sourceSet]
|
sourceSetToParticipatedCompilations[sourceSet]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user