aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/transformers/pages/merger
diff options
context:
space:
mode:
authorKamil Doległo <kamilok1965@interia.pl>2020-05-05 11:53:16 +0200
committerPaweł Marks <Kordyjan@users.noreply.github.com>2020-05-19 09:56:32 +0200
commit430d7d6453a0b63dcabecd54aea915410cd35103 (patch)
treeb9e40e3eaa9f1948590141d7d46491e2f34f2ef9 /plugins/base/src/main/kotlin/transformers/pages/merger
parentc1b4669ee227a479516f37ce1b9dff5f2d2bef38 (diff)
downloaddokka-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.kt40
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