Skip to content

Commit

Permalink
Fix unresolved link to declaration from another source set
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed Feb 17, 2023
1 parent 1fd0459 commit 3129dbe
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 7 deletions.
Expand Up @@ -95,18 +95,28 @@ open class DokkaLocationProvider(
.flatMap { it.dependentSourceSets }
.mapNotNull { ssid ->
dokkaContext.configuration.sourceSets.find { it.sourceSetID == ssid }?.toDisplaySourceSet()
}.map {
setOf(it)
}
}

return allSourceSets.asSequence().mapNotNull { displaySourceSet ->
pagesIndex[DRIWithSourceSets(dri, displaySourceSet)]?.let { page -> resolve(page, context) }
?: anchorsIndex[driWithSourceSets]?.let { (page, kind) ->
val dci = DCI(setOf(dri), kind)
resolve(page, context) + "#" + anchorForDCI(dci, displaySourceSet)
}
}.firstOrNull()
return getLocalPageLink(dri, allSourceSets, context)
?: getLocalAnchor(dri, allSourceSets, context)
}

private fun getLocalPageLink(dri: DRI, allSourceSets: Iterable<Set<DisplaySourceSet>>, context: PageNode?) =
allSourceSets.mapNotNull { displaySourceSet ->
pagesIndex[DRIWithSourceSets(dri, displaySourceSet)]
}.firstOrNull()?.let { page -> resolve(page, context) }

private fun getLocalAnchor(dri: DRI, allSourceSets: Iterable<Set<DisplaySourceSet>>, context: PageNode?) =
allSourceSets.mapNotNull { displaySourceSet ->
anchorsIndex[DRIWithSourceSets(dri, displaySourceSet)]?.let { (page, kind) ->
val dci = DCI(setOf(dri), kind)
resolve(page, context) + "#" + anchorForDCI(dci, displaySourceSet)
}
}.firstOrNull()

override fun pathToRoot(from: PageNode): String =
pathTo(pageGraphRoot, from).removeSuffix(PAGE_WITH_CHILDREN_SUFFIX)

Expand Down
Expand Up @@ -10,11 +10,14 @@ import org.jetbrains.dokka.model.doc.Text
import org.jetbrains.dokka.pages.*
import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import org.jsoup.Jsoup
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import utils.TestOutputWriterPlugin
import utils.assertNotNull
import java.net.URL
import java.nio.file.Paths
import kotlin.test.assertEquals

class LinkableContentTest : BaseAbstractTest() {

Expand Down Expand Up @@ -360,4 +363,48 @@ class LinkableContentTest : BaseAbstractTest() {
}

}

@Test
fun `should have a correct link to declaration from another source set`() {
val writerPlugin = TestOutputWriterPlugin()
val configuration = dokkaConfiguration {
sourceSets {
val common = sourceSet {
sourceRoots = listOf("src/commonMain")
analysisPlatform = "common"
name = "common"
displayName = "common"
}
sourceSet {
sourceRoots = listOf("src/jvmMain/")
analysisPlatform = "jvm"
name = "jvm"
displayName = "jvm"
dependentSourceSets = setOf(common.value.sourceSetID)
}
}
}

testInline(
"""
/src/commonMain/main.kt
class A
/src/jvmMain/main.kt
/**
* link to [A]
*/
class B
""".trimIndent()
,
pluginOverrides = listOf(writerPlugin),
configuration = configuration
) {
renderingStage = { _, _ ->
val page =
Jsoup.parse(writerPlugin.writer.contents.getValue("root/[root]/-b/index.html"))
val link = page.select(".paragraph a").single()
assertEquals("../-a/index.html", link.attr("href"))
}
}
}
}

0 comments on commit 3129dbe

Please sign in to comment.