aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/transformers
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/main/kotlin/transformers')
-rw-r--r--plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt61
1 files changed, 21 insertions, 40 deletions
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 ed4c4792..e72700e0 100644
--- a/plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt
+++ b/plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt
@@ -4,11 +4,7 @@ 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
-import org.jetbrains.dokka.analysis.DokkaMessageCollector
-import org.jetbrains.dokka.analysis.DokkaResolutionFacade
-import org.jetbrains.dokka.analysis.EnvironmentAndFacade
+import org.jetbrains.dokka.analysis.*
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.renderers.sourceSets
import org.jetbrains.dokka.links.DRI
@@ -38,51 +34,36 @@ abstract class SamplesTransformer(val context: DokkaContext) : PageTransformer {
* Currently, all `ThreadLocal`s are in a compiler/IDE codebase.
*/
runBlocking(Dispatchers.Default) {
- val analysis = setUpAnalysis(context)
-
- input.transformContentPagesTree { page ->
- val samples = (page as? WithDocumentables)?.documentables?.flatMap {
- it.documentation.entries.flatMap { entry ->
- entry.value.children.filterIsInstance<Sample>().map { entry.key to it }
+ val analysis = SamplesKotlinAnalysis(
+ sourceSets = context.configuration.sourceSets,
+ logger = context.logger,
+ projectKotlinAnalysis = context.plugin<DokkaBase>().querySingle { kotlinAnalysis }
+ )
+ analysis.use {
+ input.transformContentPagesTree { page ->
+ val samples = (page as? WithDocumentables)?.documentables?.flatMap {
+ it.documentation.entries.flatMap { entry ->
+ entry.value.children.filterIsInstance<Sample>().map { entry.key to it }
+ }
}
- }
-
- samples?.fold(page as ContentPage) { acc, (sampleSourceSet, sample) ->
- acc.modified(
- content = acc.content.addSample(page, sampleSourceSet, sample.name, analysis),
- embeddedResources = acc.embeddedResources + KOTLIN_PLAYGROUND_SCRIPT
- )
- } ?: page
- }
- }
- private fun setUpAnalysis(context: DokkaContext) = context.configuration.sourceSets.associateWith { sourceSet ->
- if (sourceSet.samples.isEmpty()) context.plugin<DokkaBase>()
- .querySingle { kotlinAnalysis }[sourceSet] // from sourceSet.sourceRoots
- else AnalysisEnvironment(DokkaMessageCollector(context.logger), sourceSet.analysisPlatform).run {
- if (analysisPlatform == Platform.jvm) {
- configureJdkClasspathRoots()
+ samples?.fold(page as ContentPage) { acc, (sampleSourceSet, sample) ->
+ acc.modified(
+ content = acc.content.addSample(page, sampleSourceSet, sample.name, it),
+ embeddedResources = acc.embeddedResources + KOTLIN_PLAYGROUND_SCRIPT
+ )
+ } ?: page
+ }
}
- sourceSet.classpath.forEach(::addClasspath)
-
- addSources(sourceSet.samples.toList())
-
- loadLanguageVersionSettings(sourceSet.languageVersion, sourceSet.apiVersion)
-
- val environment = createCoreEnvironment()
- val (facade, _) = createResolutionFacade(environment)
- EnvironmentAndFacade(environment, facade)
}
- }
private fun ContentNode.addSample(
contentPage: ContentPage,
sourceSet: DokkaSourceSet,
fqName: String,
- analysis: Map<DokkaSourceSet, EnvironmentAndFacade>
+ analysis: KotlinAnalysis
): ContentNode {
- val facade = analysis[sourceSet]?.facade
- ?: return this.also { context.logger.warn("Cannot resolve facade for platform ${sourceSet.sourceSetID}") }
+ val facade = analysis[sourceSet].facade
val psiElement = fqNameToPsiElement(facade, fqName)
?: return this.also { context.logger.warn("Cannot find PsiElement corresponding to $fqName") }
val imports =