diff options
author | Błażej Kardyś <bkardys@virtuslab.com> | 2020-05-27 01:16:48 +0200 |
---|---|---|
committer | Błażej Kardyś <bkardys@virtuslab.com> | 2020-06-04 11:26:05 +0200 |
commit | 6dc9498ca849645ecb4ec923bb7116b245dca706 (patch) | |
tree | 23022e6d6f3aea18b9e8efaaa482cafae9bee989 /core/src | |
parent | b614604effda51ca7c76c8901be78ced62b642b2 (diff) | |
download | dokka-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.kt | 3 | ||||
-rw-r--r-- | core/src/main/kotlin/DokkaBootstrapImpl.kt | 2 | ||||
-rw-r--r-- | core/src/main/kotlin/DokkaGenerator.kt | 25 | ||||
-rw-r--r-- | core/src/main/kotlin/DokkaMultimoduleBootstrapImpl.kt | 25 | ||||
-rw-r--r-- | core/src/main/kotlin/configuration.kt | 7 | ||||
-rw-r--r-- | core/src/main/kotlin/defaultConfiguration.kt | 8 | ||||
-rw-r--r-- | core/src/main/kotlin/pages/ContentNodes.kt | 3 | ||||
-rw-r--r-- | core/src/main/kotlin/pages/PageNodes.kt | 25 | ||||
-rw-r--r-- | core/src/main/kotlin/parsers/MarkdownParser.kt | 22 | ||||
-rw-r--r-- | core/src/main/kotlin/transformers/pages/PageCreator.kt | 8 |
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 |