aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/resolvers
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/main/kotlin/resolvers')
-rw-r--r--plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProviderFactory.kt4
-rw-r--r--plugins/base/src/main/kotlin/resolvers/local/MultimoduleLocationProvider.kt32
2 files changed, 35 insertions, 1 deletions
diff --git a/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProviderFactory.kt b/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProviderFactory.kt
index 57f53ba6..1918472b 100644
--- a/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProviderFactory.kt
+++ b/plugins/base/src/main/kotlin/resolvers/local/DefaultLocationProviderFactory.kt
@@ -1,10 +1,12 @@
package org.jetbrains.dokka.base.resolvers.local
+import org.jetbrains.dokka.pages.MultimoduleRootPageNode
import org.jetbrains.dokka.pages.RootPageNode
import org.jetbrains.dokka.plugability.DokkaContext
class DefaultLocationProviderFactory(private val context: DokkaContext) : LocationProviderFactory {
override fun getLocationProvider(pageNode: RootPageNode) =
- DefaultLocationProvider(pageNode, context)
+ if (pageNode.children.first() is MultimoduleRootPageNode) MultimoduleLocationProvider(pageNode, context)
+ else DefaultLocationProvider(pageNode, context)
} \ No newline at end of file
diff --git a/plugins/base/src/main/kotlin/resolvers/local/MultimoduleLocationProvider.kt b/plugins/base/src/main/kotlin/resolvers/local/MultimoduleLocationProvider.kt
new file mode 100644
index 00000000..21692bf9
--- /dev/null
+++ b/plugins/base/src/main/kotlin/resolvers/local/MultimoduleLocationProvider.kt
@@ -0,0 +1,32 @@
+package org.jetbrains.dokka.base.resolvers.local
+
+import org.jetbrains.dokka.links.DRI
+import org.jetbrains.dokka.model.SourceSetData
+import org.jetbrains.dokka.pages.PageNode
+import org.jetbrains.dokka.pages.RootPageNode
+import org.jetbrains.dokka.plugability.DokkaContext
+
+class MultimoduleLocationProvider(private val root: RootPageNode, context: DokkaContext) : LocationProvider {
+
+ val defaultLocationProvider = DefaultLocationProvider(root, context)
+
+ val paths = context.configuration.modules.map {
+ it.name to it.path
+ }.toMap()
+
+ override fun resolve(dri: DRI, platforms: List<SourceSetData>, context: PageNode?): String =
+ dri.takeIf { it.packageName == MULTIMODULE_PACKAGE_PLACEHOLDER }?.classNames?.let { paths[it] }?.let {
+ "$it/${dri.classNames}/index.html"
+ } ?: defaultLocationProvider.resolve(dri, platforms, context)
+
+ override fun resolve(node: PageNode, context: PageNode?, skipExtension: Boolean): String =
+ defaultLocationProvider.resolve(node, context, skipExtension)
+
+ override fun resolveRoot(node: PageNode): String = defaultLocationProvider.resolveRoot(node)
+
+ override fun ancestors(node: PageNode): List<PageNode> = listOf(root)
+
+ companion object {
+ const val MULTIMODULE_PACKAGE_PLACEHOLDER = ".ext"
+ }
+} \ No newline at end of file