aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin
diff options
context:
space:
mode:
authorVadim Mishenev <vad-mishenev@yandex.ru>2023-10-24 18:12:46 +0300
committerGitHub <noreply@github.com>2023-10-24 18:12:46 +0300
commitb28120111d98cc9ce70f31266cc81a9ae85015f9 (patch)
treefba3682e241d87e293789d5463a80e71c90f5ef1 /plugins/base/src/main/kotlin
parent21c587bc2e3904d370ca28e7404122bbad49ecf8 (diff)
downloaddokka-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/kotlin')
-rw-r--r--plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt15
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 }