package org.jetbrains.dokka.pages import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet import org.jetbrains.dokka.DokkaSourceSetID import org.jetbrains.dokka.Platform data class ContentSourceSet( val sourceSetIDs: CompositeSourceSetID, val displayName: String, val analysisPlatform: Platform ) { constructor(sourceSet: DokkaSourceSet) : this( sourceSetIDs = CompositeSourceSetID(sourceSet.sourceSetID), displayName = sourceSet.displayName, analysisPlatform = sourceSet.analysisPlatform ) operator fun contains(sourceSetID: DokkaSourceSetID): Boolean { return sourceSetID in sourceSetIDs } operator fun contains(sourceSet: DokkaSourceSet): Boolean { return sourceSet.sourceSetID in this } } data class CompositeSourceSetID( private val children: Set ) { constructor(sourceSetIDs: Iterable) : this(sourceSetIDs.toSet()) constructor(sourceSetId: DokkaSourceSetID) : this(setOf(sourceSetId)) init { require(children.isNotEmpty()) { "Expected at least one source set id" } } val merged = DokkaSourceSetID( moduleName = children.map { it.moduleName }.reduce { acc, s -> "$acc+$s" }, sourceSetName = children.map { it.sourceSetName }.reduce { acc, s -> "$acc+$s" } ) val all: List = listOf(merged, *children.toTypedArray()) operator fun contains(sourceSetId: DokkaSourceSetID): Boolean { return sourceSetId in all } operator fun contains(sourceSet: DokkaSourceSet): Boolean { return sourceSet.sourceSetID in this } } fun DokkaSourceSet.toContentSourceSet(): ContentSourceSet = ContentSourceSet(this) fun Iterable.toContentSourceSets(): Set = map { it.toContentSourceSet() }.toSet() val Iterable.sourceSetIDs: List get() = this.flatMap { it.sourceSetIDs.all }