From 8e5c63d035ef44a269b8c43430f43f5c8eebfb63 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Fri, 10 Nov 2023 11:46:54 +0100 Subject: 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 --- .../pages/merger/FallbackPageMergerStrategy.kt | 22 ------- .../kotlin/transformers/pages/merger/PageMerger.kt | 40 ------------- .../pages/merger/PageMergerStrategy.kt | 13 ----- .../merger/SameMethodNamePageMergerStrategy.kt | 68 ---------------------- .../merger/SourceSetMergingPageTransformer.kt | 43 -------------- 5 files changed, 186 deletions(-) delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/merger/FallbackPageMergerStrategy.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/merger/PageMerger.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/merger/PageMergerStrategy.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/merger/SourceSetMergingPageTransformer.kt (limited to 'plugins/base/src/main/kotlin/transformers/pages/merger') 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, path: List): List { - 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 = context.plugin().query { pageMergerStrategy } - - override fun invoke(input: RootPageNode): RootPageNode = - input.modified(children = input.children.map { it.mergeChildren(emptyList()) }) - - private fun PageNode.mergeChildren(path: List): 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, path: List): List = - strategies.fold(pages) { acc, strategy -> tryMerge(strategy, acc, path) } - - private fun tryMerge(strategy: PageMergerStrategy, pages: List, path: List) = - if (pages.size > 1) strategy.tryMerge(pages, path) else pages -} - -private fun Iterable.assertSingle(path: List): 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, path: List): List - -} 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, path: List): List { - val members = pages - .filterIsInstance() - .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)?.isDeprecated() == true } - - private fun List.allSourceSets(): Set = - fold(emptySet()) { acc, e -> acc + e.sourceSets() } - - private fun squashDivergentInstances(nodes: List): ContentNode = - nodes.map { it.content } - .reduce { acc, node -> - acc.mapTransform { 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) -- cgit