From 1c6dabaee7764954a9783effa7463f9866a02066 Mon Sep 17 00:00:00 2001 From: Błażej Kardyś Date: Thu, 27 Aug 2020 15:38:29 +0200 Subject: Fixing top-level functions linking for javadoc --- .../javadoc/location/JavadocLocationProvider.kt | 6 +++++- .../dokka/javadoc/pages/JavadocPageNodes.kt | 22 +++++++++++----------- .../dokka/javadoc/pages/htmlPreprocessors.kt | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) (limited to 'plugins/javadoc/src/main/kotlin') diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt index 984ee0e7..38258fc6 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt @@ -49,9 +49,13 @@ class JavadocLocationProvider(pageRoot: RootPageNode, dokkaContext: DokkaContext pageRoot.children.forEach { registerPath(it) } } + private val parentPageIndex = HashMap() private val nodeIndex = HashMap().apply { fun registerNode(node: PageNode) { if (node is ContentPage) put(node.dri.first(), node) + (node as? JavadocClasslikePageNode)?.getAnchorables()?.forEach { navigableNode -> + parentPageIndex[navigableNode.getDRI()] = node + } node.children.forEach(::registerNode) } registerNode(pageRoot) @@ -77,7 +81,7 @@ class JavadocLocationProvider(pageRoot: RootPageNode, dokkaContext: DokkaContext private fun getLocalLocation(dri: DRI, context: PageNode?): String? = nodeIndex[dri]?.let { resolve(it, context) } - ?: nodeIndex[dri.parent]?.takeIf { dri.target !is PointingToGenericParameters && it is JavadocClasslikePageNode }?.let { + ?: parentPageIndex[dri]?.let { val anchor = when (val anchorElement = (it as? JavadocClasslikePageNode)?.findAnchorableByDRI(dri)) { is JavadocFunctionNode -> anchorElement.getAnchor() is JavadocEntryNode -> anchorElement.name diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt index feedc493..3875c307 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt @@ -1,7 +1,6 @@ package org.jetbrains.dokka.javadoc.pages import com.intellij.psi.PsiClass -import org.jetbrains.dokka.DokkaConfiguration import org.jetbrains.dokka.Platform import org.jetbrains.dokka.analysis.DescriptorDocumentableSource import org.jetbrains.dokka.analysis.PsiDocumentableSource @@ -15,8 +14,6 @@ import org.jetbrains.dokka.pages.* import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.resolve.DescriptorUtils.getClassDescriptorForType -import java.util.* -import kotlin.collections.HashMap interface JavadocPageNode : ContentPage @@ -25,8 +22,8 @@ interface WithJavadocExtra : WithExtraProperties { throw IllegalStateException("Merging extras is not applicable for javadoc") } -interface WithIndexables { - fun getAllIndexables(): List +interface WithNavigable { + fun getAllNavigables(): List } interface WithBrief { @@ -73,13 +70,13 @@ class JavadocPackagePageNode( override val children: List = emptyList(), override val embeddedResources: List = listOf() ) : JavadocPageNode, - WithIndexables, + WithNavigable, NavigableJavadocNode, PackagePage { - override fun getAllIndexables(): List = + override fun getAllNavigables(): List = children.filterIsInstance().flatMap { - if (it is WithIndexables) it.getAllIndexables() + if (it is WithNavigable) it.getAllNavigables() else listOf(it) } @@ -185,10 +182,13 @@ class JavadocClasslikePageNode( override val children: List = emptyList(), override val embeddedResources: List = listOf(), override val extra: PropertyContainer = PropertyContainer.empty(), -) : JavadocPageNode, WithJavadocExtra, NavigableJavadocNode, WithIndexables, WithBrief, ClasslikePage { +) : JavadocPageNode, WithJavadocExtra, NavigableJavadocNode, WithNavigable, WithBrief, ClasslikePage { - override fun getAllIndexables(): List = - methods + entries + classlikes.map { it.getAllIndexables() }.flatten() + this + override fun getAllNavigables(): List = + methods + entries + classlikes.map { it.getAllNavigables() }.flatten() + this + + fun getAnchorables(): List = + constructors + methods + entries + properties val kind: String? = documentable?.kind() val packageName = dri.first().packageName diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/htmlPreprocessors.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/htmlPreprocessors.kt index 5d51bc24..4b775f29 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/htmlPreprocessors.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/htmlPreprocessors.kt @@ -77,7 +77,7 @@ object IndexGenerator : PageTransformer { override fun invoke(input: RootPageNode): RootPageNode { val elements = HashMap>() (input as JavadocModulePageNode).children.filterIsInstance().forEach { - it.getAllIndexables().forEach { d -> + it.getAllNavigables().forEach { d -> val name = when (d) { is JavadocPageNode -> d.name is AnchorableJavadocNode -> d.name -- cgit