diff options
author | Kamil Doległo <kamilok1965@interia.pl> | 2020-05-05 11:53:16 +0200 |
---|---|---|
committer | Paweł Marks <Kordyjan@users.noreply.github.com> | 2020-05-19 09:56:32 +0200 |
commit | 430d7d6453a0b63dcabecd54aea915410cd35103 (patch) | |
tree | b9e40e3eaa9f1948590141d7d46491e2f34f2ef9 /plugins/base/src/main/kotlin/transformers/pages/merger | |
parent | c1b4669ee227a479516f37ce1b9dff5f2d2bef38 (diff) | |
download | dokka-430d7d6453a0b63dcabecd54aea915410cd35103.tar.gz dokka-430d7d6453a0b63dcabecd54aea915410cd35103.tar.bz2 dokka-430d7d6453a0b63dcabecd54aea915410cd35103.zip |
Add a draft version of divergent rendering
Diffstat (limited to 'plugins/base/src/main/kotlin/transformers/pages/merger')
-rw-r--r-- | plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt b/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt index 31e79555..77226310 100644 --- a/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt +++ b/plugins/base/src/main/kotlin/transformers/pages/merger/SameMethodNamePageMergerStrategy.kt @@ -4,34 +4,34 @@ import org.jetbrains.dokka.pages.* object SameMethodNamePageMergerStrategy : PageMergerStrategy { override fun tryMerge(pages: List<PageNode>, path: List<String>): List<PageNode> { - val name = pages.first().name - val members = pages.filterIsInstance<MemberPageNode>() - - if (members.isEmpty()) return pages - - val others = pages.filterNot { it is MemberPageNode } - - val resChildren = members.flatMap { it.children }.distinct() + val members = pages.filterIsInstance<MemberPageNode>().takeIf { it.isNotEmpty() } ?: return pages + val name = pages.first().name.also { + if (pages.any { page -> page.name != it }) { // Is this even possible? + println("Page names for $it do not match!") // TODO pass logger here somehow + } + } val dri = members.flatMap { it.dri }.toSet() - val dci = DCI( - dri = dri, - kind = members.first().content.dci.kind - ) val merged = MemberPageNode( dri = dri, name = name, - children = resChildren, - content = asGroup( - dci, - members.map { it.content }), + children = members.flatMap { it.children }.distinct(), + content = squashDivergentInstances(members), documentable = null ) - return others + listOf(merged) + return (pages - members) + listOf(merged) } - fun asGroup(dci: DCI, nodes: List<ContentNode>): ContentGroup = - nodes.first().let { ContentGroup(nodes, dci, it.sourceSets, it.style, it.extra) } - + 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?.single() + ).filterNotNull() + ) + } + } }
\ No newline at end of file |