diff --git a/core/src/main/kotlin/model/CompositeSourceSetID.kt b/core/src/main/kotlin/model/CompositeSourceSetID.kt index e14b01dfab..3295935a18 100644 --- a/core/src/main/kotlin/model/CompositeSourceSetID.kt +++ b/core/src/main/kotlin/model/CompositeSourceSetID.kt @@ -13,10 +13,12 @@ data class CompositeSourceSetID( require(children.isNotEmpty()) { "Expected at least one source set id" } } - val merged = DokkaSourceSetID( - scopeId = children.joinToString(separator = "+") { it.scopeId }, - sourceSetName = children.joinToString(separator = "+") { it.sourceSetName } - ) + val merged = children.sortedBy { it.scopeId + it.sourceSetName }.let { sortedChildren -> + DokkaSourceSetID( + scopeId = sortedChildren.joinToString(separator = "+") { it.scopeId }, + sourceSetName = sortedChildren.joinToString(separator = "+") { it.sourceSetName } + ) + } val all: Set = setOf(merged, *children.toTypedArray()) diff --git a/plugins/base/src/main/kotlin/renderers/pageId.kt b/plugins/base/src/main/kotlin/renderers/pageId.kt index b80121c090..a4056025bb 100644 --- a/plugins/base/src/main/kotlin/renderers/pageId.kt +++ b/plugins/base/src/main/kotlin/renderers/pageId.kt @@ -11,8 +11,15 @@ internal val ContentPage.pageId: String internal val NavigationNode.pageId: String get() = pageId(dri, sourceSets) +internal fun Set.shortenToUrl() = + sortedBy { it.sourceSetIDs.merged.let { it.scopeId + it.sourceSetName } }.joinToString().hashCode() + +internal fun DRI.shortenToUrl() = toString() + +internal fun Set.shortenToUrl() = sortedBy { it.toString() }.joinToString() + /** * Page Id is required to have a sourceSet in order to distinguish between different pages that has same DRI but different sourceSet * like main functions that are not expect/actual */ -private fun pageId(dri: DRI, sourceSets: Set): String = "$dri/${sourceSets.hashCode()}" \ No newline at end of file +private fun pageId(dri: DRI, sourceSets: Set): String = "${dri.shortenToUrl()}/${sourceSets.shortenToUrl()}" \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/resolvers/local/DokkaBaseLocationProvider.kt b/plugins/base/src/main/kotlin/resolvers/local/DokkaBaseLocationProvider.kt index fa13304549..3f4b065f35 100644 --- a/plugins/base/src/main/kotlin/resolvers/local/DokkaBaseLocationProvider.kt +++ b/plugins/base/src/main/kotlin/resolvers/local/DokkaBaseLocationProvider.kt @@ -1,5 +1,6 @@ package org.jetbrains.dokka.base.resolvers.local +import org.jetbrains.dokka.base.renderers.shortenToUrl import org.jetbrains.dokka.model.DisplaySourceSet import org.jetbrains.dokka.pages.DCI import org.jetbrains.dokka.pages.RootPageNode @@ -17,6 +18,6 @@ abstract class DokkaBaseLocationProvider( * 2040 characters limit */ open fun anchorForDCI(dci: DCI, sourceSets: Set): String = - (dci.dri.toString() + "/" + dci.kind + "/" + sourceSets.hashCode()).urlEncoded() + (dci.dri.shortenToUrl() + "/" + dci.kind + "/" + sourceSets.shortenToUrl()).urlEncoded() }