aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/transformers/pages/merger
diff options
context:
space:
mode:
authorIgnat Beresnev <ignat.beresnev@jetbrains.com>2023-11-10 11:46:54 +0100
committerGitHub <noreply@github.com>2023-11-10 11:46:54 +0100
commit8e5c63d035ef44a269b8c43430f43f5c8eebfb63 (patch)
tree1b915207b2b9f61951ddbf0ff2e687efd053d555 /plugins/base/src/main/kotlin/transformers/pages/merger
parenta44efd4ba0c2e4ab921ff75e0f53fc9335aa79db (diff)
downloaddokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.gz
dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.bz2
dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.zip
Restructure the project to utilize included builds (#3174)
* Refactor and simplify artifact publishing * Update Gradle to 8.4 * Refactor and simplify convention plugins and build scripts Fixes #3132 --------- Co-authored-by: Adam <897017+aSemy@users.noreply.github.com> Co-authored-by: Oleg Yukhnevich <whyoleg@gmail.com>
Diffstat (limited to 'plugins/base/src/main/kotlin/transformers/pages/merger')
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/merger/FallbackPageMergerStrategy.kt22
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/merger/PageMerger.kt40
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/merger/PageMergerStrategy.kt13
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt68
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/merger/SourceSetMergingPageTransformer.kt43
5 files changed, 0 insertions, 186 deletions
diff --git a/plugins/base/src/main/kotlin/transformers/pages/merger/FallbackPageMergerStrategy.kt b/plugins/base/src/main/kotlin/transformers/pages/merger/FallbackPageMergerStrategy.kt
deleted file mode 100644
index 80886cc5..00000000
--- a/plugins/base/src/main/kotlin/transformers/pages/merger/FallbackPageMergerStrategy.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.dokka.base.transformers.pages.merger
-
-import org.jetbrains.dokka.pages.ContentPage
-import org.jetbrains.dokka.pages.PageNode
-import org.jetbrains.dokka.utilities.DokkaLogger
-
-public class FallbackPageMergerStrategy(
- private val logger: DokkaLogger
-) : PageMergerStrategy {
- override fun tryMerge(pages: List<PageNode>, path: List<String>): List<PageNode> {
- pages.map {
- (it as? ContentPage)
- }
- val renderedPath = path.joinToString(separator = "/")
- if (pages.size != 1) logger.warn("For $renderedPath: expected 1 page, but got ${pages.size}")
- return listOf(pages.first())
- }
-}
diff --git a/plugins/base/src/main/kotlin/transformers/pages/merger/PageMerger.kt b/plugins/base/src/main/kotlin/transformers/pages/merger/PageMerger.kt
deleted file mode 100644
index e52c233c..00000000
--- a/plugins/base/src/main/kotlin/transformers/pages/merger/PageMerger.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.dokka.base.transformers.pages.merger
-
-import org.jetbrains.dokka.base.DokkaBase
-import org.jetbrains.dokka.pages.PageNode
-import org.jetbrains.dokka.pages.RootPageNode
-import org.jetbrains.dokka.plugability.DokkaContext
-import org.jetbrains.dokka.plugability.plugin
-import org.jetbrains.dokka.plugability.query
-import org.jetbrains.dokka.transformers.pages.PageTransformer
-
-public class PageMerger(context: DokkaContext) : PageTransformer {
-
- private val strategies: Iterable<PageMergerStrategy> = context.plugin<DokkaBase>().query { pageMergerStrategy }
-
- override fun invoke(input: RootPageNode): RootPageNode =
- input.modified(children = input.children.map { it.mergeChildren(emptyList()) })
-
- private fun PageNode.mergeChildren(path: List<String>): PageNode = children.groupBy { it::class }.map {
- it.value.groupBy { it.name }.map { (n, v) -> mergePageNodes(v, path + n) }.map { it.assertSingle(path) }
- }.let { pages ->
- modified(children = pages.flatten().map { it.mergeChildren(path + it.name) })
- }
-
- private fun mergePageNodes(pages: List<PageNode>, path: List<String>): List<PageNode> =
- strategies.fold(pages) { acc, strategy -> tryMerge(strategy, acc, path) }
-
- private fun tryMerge(strategy: PageMergerStrategy, pages: List<PageNode>, path: List<String>) =
- if (pages.size > 1) strategy.tryMerge(pages, path) else pages
-}
-
-private fun <T> Iterable<T>.assertSingle(path: List<String>): T = try {
- single()
- } catch (e: Exception) {
- val renderedPath = path.joinToString(separator = "/")
- throw IllegalStateException("Page merger is misconfigured. Error for $renderedPath: ${e.message}")
- }
diff --git a/plugins/base/src/main/kotlin/transformers/pages/merger/PageMergerStrategy.kt b/plugins/base/src/main/kotlin/transformers/pages/merger/PageMergerStrategy.kt
deleted file mode 100644
index ea1b1f03..00000000
--- a/plugins/base/src/main/kotlin/transformers/pages/merger/PageMergerStrategy.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.dokka.base.transformers.pages.merger
-
-import org.jetbrains.dokka.pages.PageNode
-
-public fun interface PageMergerStrategy {
-
- public fun tryMerge(pages: List<PageNode>, path: List<String>): List<PageNode>
-
-}
diff --git a/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt b/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt
deleted file mode 100644
index 864545e6..00000000
--- a/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.dokka.base.transformers.pages.merger
-
-import org.jetbrains.dokka.base.renderers.sourceSets
-import org.jetbrains.dokka.base.transformers.documentables.isDeprecated
-import org.jetbrains.dokka.model.DisplaySourceSet
-import org.jetbrains.dokka.model.Documentable
-import org.jetbrains.dokka.model.dfs
-import org.jetbrains.dokka.model.properties.WithExtraProperties
-import org.jetbrains.dokka.pages.*
-import org.jetbrains.dokka.utilities.DokkaLogger
-
-/**
- * Merges [MemberPage] elements that have the same name.
- * That includes **both** properties and functions.
- */
-public class SameMethodNamePageMergerStrategy(
- public val logger: DokkaLogger
-) : PageMergerStrategy {
- override fun tryMerge(pages: List<PageNode>, path: List<String>): List<PageNode> {
- val members = pages
- .filterIsInstance<MemberPageNode>()
- .takeIf { it.isNotEmpty() }
- ?.sortedBy { it.containsDeprecatedDocumentables() } // non-deprecated first
- ?: return pages
-
- val name = pages.first().name.also {
- if (pages.any { page -> page.name != it }) { // Is this even possible?
- logger.error("Page names for $it do not match!")
- }
- }
- val dri = members.flatMap { it.dri }.toSet()
-
-
- val merged = MemberPageNode(
- dri = dri,
- name = name,
- children = members.flatMap { it.children }.distinct(),
- content = squashDivergentInstances(members).withSourceSets(members.allSourceSets()),
- embeddedResources = members.flatMap { it.embeddedResources }.distinct(),
- documentables = members.flatMap { it.documentables }
- )
-
- return (pages - members) + listOf(merged)
- }
-
- @Suppress("UNCHECKED_CAST")
- private fun MemberPageNode.containsDeprecatedDocumentables() =
- this.documentables.any { (it as? WithExtraProperties<Documentable>)?.isDeprecated() == true }
-
- private fun List<MemberPageNode>.allSourceSets(): Set<DisplaySourceSet> =
- fold(emptySet()) { acc, e -> acc + e.sourceSets() }
-
- private fun squashDivergentInstances(nodes: List<MemberPageNode>): ContentNode =
- nodes.map { it.content }
- .reduce { acc, node ->
- acc.mapTransform<ContentDivergentGroup, ContentNode> { g ->
- g.copy(children = (g.children +
- ((node.dfs { it is ContentDivergentGroup && it.groupID == g.groupID } as? ContentDivergentGroup)
- ?.children ?: emptyList())
- )
- )
- }
- }
-}
diff --git a/plugins/base/src/main/kotlin/transformers/pages/merger/SourceSetMergingPageTransformer.kt b/plugins/base/src/main/kotlin/transformers/pages/merger/SourceSetMergingPageTransformer.kt
deleted file mode 100644
index 8d52a39d..00000000
--- a/plugins/base/src/main/kotlin/transformers/pages/merger/SourceSetMergingPageTransformer.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.dokka.base.transformers.pages.merger
-
-import org.jetbrains.dokka.Platform
-import org.jetbrains.dokka.model.DisplaySourceSet
-import org.jetbrains.dokka.model.toDisplaySourceSets
-import org.jetbrains.dokka.pages.ContentComposite
-import org.jetbrains.dokka.pages.ContentNode
-import org.jetbrains.dokka.pages.RootPageNode
-import org.jetbrains.dokka.plugability.DokkaContext
-import org.jetbrains.dokka.transformers.pages.PageTransformer
-
-public class SourceSetMergingPageTransformer(context: DokkaContext) : PageTransformer {
-
- private val mergedSourceSets = context.configuration.sourceSets.toDisplaySourceSets()
- .associateBy { sourceSet -> sourceSet.key }
-
- override fun invoke(input: RootPageNode): RootPageNode {
- return input.transformContentPagesTree { contentPage ->
- val content: ContentNode = contentPage.content
- contentPage.modified(content = transformWithMergedSourceSets(content))
- }
- }
-
- private fun transformWithMergedSourceSets(
- contentNode: ContentNode
- ): ContentNode {
- val mergedSourceSets = contentNode.sourceSets.map { mergedSourceSets.getValue(it.key) }.toSet()
- return when (contentNode) {
- is ContentComposite -> contentNode
- .transformChildren(::transformWithMergedSourceSets)
- .withSourceSets(mergedSourceSets)
- else -> contentNode.withSourceSets(mergedSourceSets.toSet())
- }
- }
-}
-
-private val DisplaySourceSet.key get() = SourceSetMergingKey(name, platform)
-
-private data class SourceSetMergingKey(private val displayName: String, private val platform: Platform)