aboutsummaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorBłażej Kardyś <bkardys@virtuslab.com>2020-05-27 01:16:48 +0200
committerBłażej Kardyś <bkardys@virtuslab.com>2020-06-04 11:26:05 +0200
commit6dc9498ca849645ecb4ec923bb7116b245dca706 (patch)
tree23022e6d6f3aea18b9e8efaaa482cafae9bee989 /core/src
parentb614604effda51ca7c76c8901be78ced62b642b2 (diff)
downloaddokka-6dc9498ca849645ecb4ec923bb7116b245dca706.tar.gz
dokka-6dc9498ca849645ecb4ec923bb7116b245dca706.tar.bz2
dokka-6dc9498ca849645ecb4ec923bb7116b245dca706.zip
All modules page generation
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/kotlin/CoreExtensions.kt3
-rw-r--r--core/src/main/kotlin/DokkaBootstrapImpl.kt2
-rw-r--r--core/src/main/kotlin/DokkaGenerator.kt25
-rw-r--r--core/src/main/kotlin/DokkaMultimoduleBootstrapImpl.kt25
-rw-r--r--core/src/main/kotlin/configuration.kt7
-rw-r--r--core/src/main/kotlin/defaultConfiguration.kt8
-rw-r--r--core/src/main/kotlin/pages/ContentNodes.kt3
-rw-r--r--core/src/main/kotlin/pages/PageNodes.kt25
-rw-r--r--core/src/main/kotlin/parsers/MarkdownParser.kt22
-rw-r--r--core/src/main/kotlin/transformers/pages/PageCreator.kt8
10 files changed, 115 insertions, 13 deletions
diff --git a/core/src/main/kotlin/CoreExtensions.kt b/core/src/main/kotlin/CoreExtensions.kt
index 7b4c9baa..b8689154 100644
--- a/core/src/main/kotlin/CoreExtensions.kt
+++ b/core/src/main/kotlin/CoreExtensions.kt
@@ -6,6 +6,7 @@ import org.jetbrains.dokka.transformers.documentation.DocumentableMerger
import org.jetbrains.dokka.transformers.documentation.DocumentableToPageTranslator
import org.jetbrains.dokka.transformers.documentation.DocumentableTransformer
import org.jetbrains.dokka.transformers.documentation.PreMergeDocumentableTransformer
+import org.jetbrains.dokka.transformers.pages.PageCreator
import org.jetbrains.dokka.transformers.pages.PageTransformer
import org.jetbrains.dokka.transformers.sources.SourceToDocumentableTranslator
import kotlin.reflect.KProperty
@@ -16,7 +17,9 @@ object CoreExtensions {
val documentableMerger by coreExtension<DocumentableMerger>()
val documentableTransformer by coreExtension<DocumentableTransformer>()
val documentableToPageTranslator by coreExtension<DocumentableToPageTranslator>()
+ val allModulePageCreator by coreExtension<PageCreator>()
val pageTransformer by coreExtension<PageTransformer>()
+ val allModulePageTransformer by coreExtension<PageTransformer>()
val renderer by coreExtension<Renderer>()
private fun <T : Any> coreExtension() = object {
diff --git a/core/src/main/kotlin/DokkaBootstrapImpl.kt b/core/src/main/kotlin/DokkaBootstrapImpl.kt
index f164a3c1..56e837fc 100644
--- a/core/src/main/kotlin/DokkaBootstrapImpl.kt
+++ b/core/src/main/kotlin/DokkaBootstrapImpl.kt
@@ -32,7 +32,7 @@ fun parsePerPackageOptions(arg: String): List<PackageOptions> {
class DokkaBootstrapImpl : DokkaBootstrap {
- private class DokkaProxyLogger(val consumer: BiConsumer<String, String>) : DokkaLogger {
+ class DokkaProxyLogger(val consumer: BiConsumer<String, String>) : DokkaLogger {
override var warningsCount: Int = 0
override var errorsCount: Int = 0
diff --git a/core/src/main/kotlin/DokkaGenerator.kt b/core/src/main/kotlin/DokkaGenerator.kt
index 6e62c033..7f90fe9a 100644
--- a/core/src/main/kotlin/DokkaGenerator.kt
+++ b/core/src/main/kotlin/DokkaGenerator.kt
@@ -60,6 +60,22 @@ class DokkaGenerator(
logger.report()
}.dump("\n\n === TIME MEASUREMENT ===\n")
+ fun generateAllModulesPage() = timed {
+ val sourceSetsCache = SourceSetCache()
+ val sourceSets = emptyMap<SourceSetData, EnvironmentAndFacade>()
+ report("Initializing plugins")
+ val context = initializePlugins(configuration, logger, sourceSets, sourceSetsCache)
+
+ report("Creating all modules page")
+ val pages = createAllModulePage(context)
+
+ report("Transforming pages")
+ val transformedPages = transformAllModulesPage(pages, context)
+
+ report("Rendering")
+ render(transformedPages, context)
+ }.dump("\n\n === TIME MEASUREMENT ===\n")
+
fun setUpAnalysis(
configuration: DokkaConfiguration,
sourceSetsCache: SourceSetCache
@@ -101,11 +117,20 @@ class DokkaGenerator(
context: DokkaContext
) = context.single(CoreExtensions.documentableToPageTranslator).invoke(transformedDocumentation)
+ fun createAllModulePage(
+ context: DokkaContext
+ ) = context.single(CoreExtensions.allModulePageCreator).invoke()
+
fun transformPages(
pages: RootPageNode,
context: DokkaContext
) = context[CoreExtensions.pageTransformer].fold(pages) { acc, t -> t(acc) }
+ fun transformAllModulesPage(
+ pages: RootPageNode,
+ context: DokkaContext
+ ) = context[CoreExtensions.allModulePageTransformer].fold(pages) { acc, t -> t(acc) }
+
fun render(
transformedPages: RootPageNode,
context: DokkaContext
diff --git a/core/src/main/kotlin/DokkaMultimoduleBootstrapImpl.kt b/core/src/main/kotlin/DokkaMultimoduleBootstrapImpl.kt
new file mode 100644
index 00000000..6825ce64
--- /dev/null
+++ b/core/src/main/kotlin/DokkaMultimoduleBootstrapImpl.kt
@@ -0,0 +1,25 @@
+package org.jetbrains.dokka
+
+import com.google.gson.Gson
+import org.jetbrains.dokka.DokkaBootstrapImpl.DokkaProxyLogger
+import org.jetbrains.dokka.utilities.DokkaLogger
+import java.util.function.BiConsumer
+
+class DokkaMultimoduleBootstrapImpl : DokkaBootstrap {
+
+ private lateinit var generator: DokkaGenerator
+
+ fun configure(logger: DokkaLogger, configuration: DokkaConfiguration) {
+ generator = DokkaGenerator(configuration, logger)
+ }
+
+ override fun configure(logger: BiConsumer<String, String>, serializedConfigurationJSON: String) = configure(
+ DokkaProxyLogger(logger),
+ Gson().fromJson(serializedConfigurationJSON, DokkaConfigurationImpl::class.java)
+ )
+
+ override fun generate() {
+ generator.generateAllModulesPage()
+ }
+
+} \ No newline at end of file
diff --git a/core/src/main/kotlin/configuration.kt b/core/src/main/kotlin/configuration.kt
index e74d10d7..c38d0234 100644
--- a/core/src/main/kotlin/configuration.kt
+++ b/core/src/main/kotlin/configuration.kt
@@ -30,6 +30,7 @@ interface DokkaConfiguration {
val generateIndexPages: Boolean
val cacheRoot: String?
val passesConfigurations: List<PassConfiguration>
+ val modules: List<DokkaModuleDescription>
val impliedPlatforms: List<String>
val pluginsClasspath: List<File>
val pluginsConfiguration: Map<String, String>
@@ -73,6 +74,12 @@ interface DokkaConfiguration {
val lineSuffix: String?
}
+ interface DokkaModuleDescription {
+ val name: String
+ val path: String
+ val docFile: String
+ }
+
interface PackageOptions {
val prefix: String
val includeNonPublic: Boolean
diff --git a/core/src/main/kotlin/defaultConfiguration.kt b/core/src/main/kotlin/defaultConfiguration.kt
index 9f36606a..acfa55d4 100644
--- a/core/src/main/kotlin/defaultConfiguration.kt
+++ b/core/src/main/kotlin/defaultConfiguration.kt
@@ -11,7 +11,8 @@ data class DokkaConfigurationImpl(
override val impliedPlatforms: List<String>,
override val passesConfigurations: List<PassConfigurationImpl>,
override val pluginsClasspath: List<File>,
- override val pluginsConfiguration: Map<String, String>
+ override val pluginsConfiguration: Map<String, String>,
+ override val modules: List<DokkaModuleDescriptionImpl>
) : DokkaConfiguration
data class PassConfigurationImpl (
@@ -43,6 +44,11 @@ data class PassConfigurationImpl (
override val sinceKotlin: String?
) : DokkaConfiguration.PassConfiguration
+data class DokkaModuleDescriptionImpl(
+ override val name: String,
+ override val path: String,
+ override val docFile: String
+): DokkaConfiguration.DokkaModuleDescription
data class SourceRootImpl(
override val path: String
diff --git a/core/src/main/kotlin/pages/ContentNodes.kt b/core/src/main/kotlin/pages/ContentNodes.kt
index 7b702841..95b7b371 100644
--- a/core/src/main/kotlin/pages/ContentNodes.kt
+++ b/core/src/main/kotlin/pages/ContentNodes.kt
@@ -46,7 +46,6 @@ data class ContentHeader(
override val extra: PropertyContainer<ContentNode> = PropertyContainer.empty()
) : ContentComposite {
constructor(level: Int, c: ContentComposite) : this(c.children, level, c.dci, c.sourceSets, c.style, c.extra)
-
override fun withNewExtras(newExtras: PropertyContainer<ContentNode>): ContentHeader = copy(extra = newExtras)
}
@@ -226,6 +225,8 @@ enum class ContentStyle : Style {
object CommentTable: Style
+object MultimoduleTable: Style
+
fun ContentNode.dfs(predicate: (ContentNode) -> Boolean): ContentNode? = if (predicate(this)) {
this
} else {
diff --git a/core/src/main/kotlin/pages/PageNodes.kt b/core/src/main/kotlin/pages/PageNodes.kt
index 32b2846e..b28e36d6 100644
--- a/core/src/main/kotlin/pages/PageNodes.kt
+++ b/core/src/main/kotlin/pages/PageNodes.kt
@@ -163,6 +163,31 @@ fun PageNode.asSequence(): Sequence<PageNode> = sequence {
children.asSequence().flatMap { it.asSequence() }.forEach { yield(it) }
}
+class MultimoduleRootPageNode(
+ override val name: String,
+ override val dri: Set<DRI>,
+ override val content: ContentNode,
+ override val embeddedResources: List<String> = emptyList()
+) : RootPageNode(), ContentPage {
+
+ override val children: List<PageNode> = emptyList()
+
+ override val documentable: Documentable? = null
+
+ override fun modified(name: String, children: List<PageNode>): RootPageNode =
+ MultimoduleRootPageNode(name, dri, content, embeddedResources)
+
+ override fun modified(
+ name: String,
+ content: ContentNode,
+ dri: Set<DRI>,
+ embeddedResources: List<String>,
+ children: List<PageNode>
+ ) =
+ if (name == this.name && content === this.content && embeddedResources === this.embeddedResources && children shallowEq this.children) this
+ else MultimoduleRootPageNode(name, dri, content, embeddedResources)
+}
+
inline fun <reified T: PageNode> PageNode.children() = children.filterIsInstance<T>()
private infix fun <T> List<T>.shallowEq(other: List<T>) =
diff --git a/core/src/main/kotlin/parsers/MarkdownParser.kt b/core/src/main/kotlin/parsers/MarkdownParser.kt
index 145e085c..308a8fb6 100644
--- a/core/src/main/kotlin/parsers/MarkdownParser.kt
+++ b/core/src/main/kotlin/parsers/MarkdownParser.kt
@@ -25,8 +25,8 @@ import java.net.MalformedURLException
import org.intellij.markdown.parser.MarkdownParser as IntellijMarkdownParser
class MarkdownParser(
- private val resolutionFacade: DokkaResolutionFacade,
- private val declarationDescriptor: DeclarationDescriptor,
+ private val resolutionFacade: DokkaResolutionFacade? = null,
+ private val declarationDescriptor: DeclarationDescriptor? = null,
private val logger: DokkaLogger
) : Parser() {
@@ -110,13 +110,15 @@ class MarkdownParser(
null
} catch (e: MalformedURLException) {
try {
- resolveKDocLink(
- resolutionFacade.resolveSession.bindingContext,
- resolutionFacade,
- declarationDescriptor,
- null,
- link.split('.')
- ).minBy { it is ClassDescriptor }?.let { DRI.from(it) }
+ if (resolutionFacade != null && declarationDescriptor != null) {
+ resolveKDocLink(
+ resolutionFacade.resolveSession.bindingContext,
+ resolutionFacade,
+ declarationDescriptor,
+ null,
+ link.split('.')
+ ).minBy { it is ClassDescriptor }?.let { DRI.from(it) }
+ } else null
} catch (e1: IllegalArgumentException) {
null
}
@@ -394,7 +396,7 @@ class MarkdownParser(
parseStringToDocNode("[${it.getSubjectName()}]")
.let {
val link = it.children[0]
- if(link is DocumentationLink) link.dri
+ if (link is DocumentationLink) link.dri
else null
}
)
diff --git a/core/src/main/kotlin/transformers/pages/PageCreator.kt b/core/src/main/kotlin/transformers/pages/PageCreator.kt
new file mode 100644
index 00000000..f74b5efa
--- /dev/null
+++ b/core/src/main/kotlin/transformers/pages/PageCreator.kt
@@ -0,0 +1,8 @@
+package org.jetbrains.dokka.transformers.pages
+
+import org.jetbrains.dokka.pages.RootPageNode
+import org.jetbrains.dokka.plugability.DokkaContext
+
+interface PageCreator {
+ operator fun invoke(): RootPageNode
+} \ No newline at end of file