diff options
| author | Szymon Świstun <sswistun@virtuslab.com> | 2020-02-05 12:07:21 +0100 |
|---|---|---|
| committer | Paweł Marks <Kordyjan@users.noreply.github.com> | 2020-02-12 13:33:10 +0100 |
| commit | 8c534f14296a92fedc3410fb48de51836cb92859 (patch) | |
| tree | 51750f4ea2cd57627e729090f11956c9319e4367 /core/src/main/kotlin/transformers | |
| parent | af9697cbd2eb1a26c8a07d191ca6360d416a1666 (diff) | |
| download | dokka-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.kt | 45 |
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 |
