From 9e8455d8a5285bfbdd92cab1515270f695a9b5d3 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Mon, 6 Jul 2020 10:08:43 +0200 Subject: Make Location provider use anchor hints --- .../kotlin/resolvers/local/DefaultLocationProvider.kt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'plugins/base/src/main/kotlin/resolvers/local') diff --git a/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProvider.kt b/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProvider.kt index ba4523a1..1df0a700 100644 --- a/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProvider.kt +++ b/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProvider.kt @@ -2,6 +2,7 @@ package org.jetbrains.dokka.base.resolvers.local import org.jetbrains.dokka.DokkaConfiguration import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet +import org.jetbrains.dokka.base.resolvers.anchors.SymbolAnchorHint import org.jetbrains.dokka.base.resolvers.external.ExternalLocationProvider import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.withDescendants @@ -27,6 +28,16 @@ open class DefaultLocationProvider( if (first) page else throw AssertionError("Multiple pages associated with dri: $dri") } + protected val anchorsIndex = pageGraphRoot.withDescendants().filterIsInstance() + .flatMap { page -> + page.content.withDescendants() + .filter { it.extra[SymbolAnchorHint] != null } + .mapNotNull { it.dci.dri.singleOrNull() } + .distinct() + .map { it to page } + }.toMap() + + protected val pathsIndex: Map> = IdentityHashMap>().apply { fun registerPath(page: PageNode, prefix: List) { val newPrefix = prefix + page.pathName @@ -41,9 +52,10 @@ open class DefaultLocationProvider( pathTo(node, context) + if (!skipExtension) extension else "" override fun resolve(dri: DRI, sourceSets: Set, context: PageNode?): String = - pagesIndex[dri]?.let { resolve(it, context) } ?: + pagesIndex[dri]?.let { resolve(it, context) } + ?: anchorsIndex[dri]?.let { resolve(it, context) + "#$dri" } // Not found in PageGraph, that means it's an external link - getExternalLocation(dri, sourceSets) + ?: getExternalLocation(dri, sourceSets) override fun resolveRoot(node: PageNode): String = pathTo(pageGraphRoot, node).removeSuffix(PAGE_WITH_CHILDREN_SUFFIX) -- cgit