aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/transformers
diff options
context:
space:
mode:
authorSzymon Świstun <sswistun@virtuslab.com>2020-02-05 12:07:21 +0100
committerPaweł Marks <Kordyjan@users.noreply.github.com>2020-02-12 13:33:10 +0100
commit8c534f14296a92fedc3410fb48de51836cb92859 (patch)
tree51750f4ea2cd57627e729090f11956c9319e4367 /core/src/main/kotlin/transformers
parentaf9697cbd2eb1a26c8a07d191ca6360d416a1666 (diff)
downloaddokka-8c534f14296a92fedc3410fb48de51836cb92859.tar.gz
dokka-8c534f14296a92fedc3410fb48de51836cb92859.tar.bz2
dokka-8c534f14296a92fedc3410fb48de51836cb92859.zip
merger for functions
Diffstat (limited to 'core/src/main/kotlin/transformers')
-rw-r--r--core/src/main/kotlin/transformers/pages/DefaultPageNodeMerger.kt45
1 files changed, 45 insertions, 0 deletions
diff --git a/core/src/main/kotlin/transformers/pages/DefaultPageNodeMerger.kt b/core/src/main/kotlin/transformers/pages/DefaultPageNodeMerger.kt
new file mode 100644
index 00000000..7cd4aba8
--- /dev/null
+++ b/core/src/main/kotlin/transformers/pages/DefaultPageNodeMerger.kt
@@ -0,0 +1,45 @@
+package org.jetbrains.dokka.transformers.pages
+
+import org.jetbrains.dokka.pages.*
+
+object DefaultPageNodeMerger : PageNodeTransformer {
+ override fun invoke(input: RootPageNode): RootPageNode =
+ input.modified(children = input.children.map { it.mergeChildren() })
+
+ fun asGroup(dci: DCI, nodes: List<ContentNode>): ContentGroup {
+ val n = nodes.first()
+ return ContentGroup(nodes, dci, n.platforms, n.style, n.extras)
+ }
+
+ fun PageNode.mergeChildren(): PageNode = if (children.isNotEmpty()) {
+ children.groupBy { it.name }
+ .map { (k, v) ->
+ if (v.size > 1) {
+ v.mergePageNodes(k)
+ } else v.first()
+ }
+ .map { it.mergeChildren() }
+ .let {
+ modified(children = it)
+ }
+ } else this
+
+ private fun List<PageNode>.mergePageNodes(
+ k: String
+ ): ContentPage {
+ val resChildren = this.flatMap { it.children }.distinct()
+ val contentChildren = this.filterIsInstance<ContentPage>()
+ val dri = contentChildren.flatMap { it.dri }.toSet()
+ val dci = DCI(
+ dri = dri,
+ kind = contentChildren.first().content.dci.kind
+ )
+ return contentChildren.first()
+ .modified(
+ dri = dri,
+ name = k,
+ children = resChildren,
+ content = asGroup(dci, contentChildren.map { it.content })
+ )
+ }
+} \ No newline at end of file