diff options
author | Vadim Mishenev <vad-mishenev@yandex.ru> | 2023-10-24 18:12:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-24 18:12:46 +0300 |
commit | b28120111d98cc9ce70f31266cc81a9ae85015f9 (patch) | |
tree | fba3682e241d87e293789d5463a80e71c90f5ef1 /plugins/base/src/main | |
parent | 21c587bc2e3904d370ca28e7404122bbad49ecf8 (diff) | |
download | dokka-b28120111d98cc9ce70f31266cc81a9ae85015f9.tar.gz dokka-b28120111d98cc9ce70f31266cc81a9ae85015f9.tar.bz2 dokka-b28120111d98cc9ce70f31266cc81a9ae85015f9.zip |
Make using of the compiler single-thread (#3202)
Diffstat (limited to 'plugins/base/src/main')
-rw-r--r-- | plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt b/plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt index 602173f4..0ae6c265 100644 --- a/plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt +++ b/plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt @@ -4,7 +4,9 @@ package org.jetbrains.dokka.base.generation +import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.newSingleThreadContext import kotlinx.coroutines.runBlocking import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.DokkaConfiguration @@ -61,11 +63,18 @@ public class SingleModuleGeneration(private val context: DokkaContext) : Generat override val generationName: String = "documentation for ${context.configuration.moduleName}" - public fun createDocumentationModels(): List<DModule> = runBlocking(Dispatchers.Default) { - context.configuration.sourceSets.parallelMap { sourceSet -> translateSources(sourceSet, context) }.flatten() - .also { modules -> if (modules.isEmpty()) exitGenerationGracefully("Nothing to document") } + /** + * Implementation note: it runs in a separated single thread due to existing support of coroutines (see #2936) + */ + @OptIn(DelicateCoroutinesApi::class) + public fun createDocumentationModels(): List<DModule> = newSingleThreadContext("Generating documentable model").use { coroutineContext -> // see https://github.com/Kotlin/dokka/issues/3151 + runBlocking(coroutineContext) { + context.configuration.sourceSets.parallelMap { sourceSet -> translateSources(sourceSet, context) }.flatten() + .also { modules -> if (modules.isEmpty()) exitGenerationGracefully("Nothing to document") } + } } + public fun transformDocumentationModelBeforeMerge(modulesFromPlatforms: List<DModule>): List<DModule> { return context.plugin<DokkaBase>() .query { preMergeDocumentableTransformer } |