diff --git a/plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt b/plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt index 9c78972adf..35d4b507e0 100644 --- a/plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt +++ b/plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt @@ -1,6 +1,8 @@ package org.jetbrains.dokka.base.transformers.pages.samples import com.intellij.psi.PsiElement +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet import org.jetbrains.dokka.Platform import org.jetbrains.dokka.analysis.AnalysisEnvironment @@ -18,11 +20,11 @@ import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.querySingle import org.jetbrains.dokka.transformers.pages.PageTransformer +import org.jetbrains.dokka.utilities.parallelMap import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.utils.PathUtil abstract class SamplesTransformer(val context: DokkaContext) : PageTransformer { @@ -50,23 +52,26 @@ abstract class SamplesTransformer(val context: DokkaContext) : PageTransformer { } } - private fun setUpAnalysis(context: DokkaContext) = context.configuration.sourceSets.associateWith { sourceSet -> - if (sourceSet.samples.isEmpty()) context.plugin() - .querySingle { kotlinAnalysis }[sourceSet] // from sourceSet.sourceRoots - else AnalysisEnvironment(DokkaMessageCollector(context.logger), sourceSet.analysisPlatform).run { - if (analysisPlatform == Platform.jvm) { - configureJdkClasspathRoots() - } - sourceSet.classpath.forEach(::addClasspath) + private fun setUpAnalysis(context: DokkaContext) = runBlocking(Dispatchers.Default) { // to run from thread of Dispatchers.Default + context.configuration.sourceSets.parallelMap { sourceSet -> + sourceSet to + if (sourceSet.samples.isEmpty()) context.plugin() + .querySingle { kotlinAnalysis }[sourceSet] // from sourceSet.sourceRoots + else AnalysisEnvironment(DokkaMessageCollector(context.logger), sourceSet.analysisPlatform).run { + if (analysisPlatform == Platform.jvm) { + configureJdkClasspathRoots() + } + sourceSet.classpath.forEach(::addClasspath) - addSources(sourceSet.samples.toList()) + addSources(sourceSet.samples.toList()) - loadLanguageVersionSettings(sourceSet.languageVersion, sourceSet.apiVersion) + loadLanguageVersionSettings(sourceSet.languageVersion, sourceSet.apiVersion) - val environment = createCoreEnvironment() - val (facade, _) = createResolutionFacade(environment) - EnvironmentAndFacade(environment, facade) - } + val environment = createCoreEnvironment() + val (facade, _) = createResolutionFacade(environment) + EnvironmentAndFacade(environment, facade) + } + }.toMap() } private fun ContentNode.addSample(