Skip to content

Commit

Permalink
Make using of the compiler single-thread #3151
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed Oct 11, 2023
1 parent 33210a4 commit 099f6c6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
15 changes: 12 additions & 3 deletions plugins/base/src/main/kotlin/generation/SingleModuleGeneration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ package org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.translator
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiNamedElement
import com.intellij.psi.util.PsiLiteralUtil.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.*
import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet
import org.jetbrains.dokka.analysis.java.JavaAnalysisPlugin
import org.jetbrains.dokka.analysis.java.parsers.JavadocParser
Expand Down Expand Up @@ -124,6 +121,10 @@ internal class DefaultDescriptorToDocumentableTranslator(
}
}

/**
* Implementation note: it runs in a separated single thread due to existing support of coroutines (see #2936)
*/
@OptIn(DelicateCoroutinesApi::class)
override fun translateClassDescriptor(descriptor: ClassDescriptor, sourceSet: DokkaSourceSet): DClasslike {
val driInfo = DRI.from(descriptor.parents.first()).withEmptyInfo()

Expand All @@ -132,9 +133,11 @@ internal class DefaultDescriptorToDocumentableTranslator(
docCommentFinder = context.plugin<JavaAnalysisPlugin>().docCommentFinder
)

return runBlocking(Dispatchers.Default) {
DokkaDescriptorVisitor(sourceSet, kdocFinder, kotlinAnalysis[sourceSet], context.logger, javadocParser)
.visitClassDescriptor(descriptor, driInfo)
return newSingleThreadContext("Generating documentable model of classlike").use { coroutineContext -> // see https://github.com/Kotlin/dokka/issues/3151
runBlocking(coroutineContext) {
DokkaDescriptorVisitor(sourceSet, kdocFinder, kotlinAnalysis[sourceSet], context.logger, javadocParser)
.visitClassDescriptor(descriptor, driInfo)
}
}
}
}
Expand Down

0 comments on commit 099f6c6

Please sign in to comment.