Update Dokka to 1.9.10-dev

- Use analysis plugin configuration instead of `StdLibAnalysisConfigurationPlugin`
- Change SamplesTransformer plugin after Dokka refactoring
This commit is contained in:
vmishenev
2023-08-16 22:11:55 +03:00
committed by Space Team
parent 18fb2ec476
commit 5c0c8ed2d5
12 changed files with 27 additions and 75 deletions
@@ -6,9 +6,8 @@ description "Dokka Plugin to transform the samples from stdlib"
final String dokka_version = property("dokka_version")
dependencies {
implementation "org.jetbrains.dokka:dokka-base:$dokka_version"
compileOnly "org.jetbrains.dokka:dokka-core:$dokka_version"
compileOnly "org.jetbrains.dokka:dokka-analysis:$dokka_version"
compileOnly "org.jetbrains.dokka:analysis-kotlin-descriptors:$dokka_version"
}
kotlin {
@@ -1,3 +1,5 @@
@file:OptIn(InternalDokkaApi::class)
package org.jetbrains.dokka.kotlinlang
import com.intellij.psi.PsiDocumentManager
@@ -6,19 +8,24 @@ import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.impl.source.tree.LeafPsiElement
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.dokka.base.transformers.pages.samples.SamplesTransformer
import org.jetbrains.dokka.InternalDokkaApi
import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.impl.KotlinSampleProvider
import org.jetbrains.dokka.analysis.kotlin.internal.SampleProvider
import org.jetbrains.dokka.analysis.kotlin.internal.SampleProviderFactory
import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.allChildren
import org.jetbrains.kotlin.psi.psiUtil.prevLeaf
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.io.PrintWriter
import java.io.StringWriter
class KotlinWebsiteSamplesTransformer(context: DokkaContext): SamplesTransformer(context) {
class KotlinWebsiteSampleProviderFactory(private val context: DokkaContext) : SampleProviderFactory {
override fun build(): SampleProvider = KotlinWebsiteSampleProvider(context)
}
class KotlinWebsiteSampleProvider(context: DokkaContext): KotlinSampleProvider(context) {
private class SampleBuilder : KtTreeVisitorVoid() {
val builder = StringBuilder()
val text: String
@@ -156,7 +163,7 @@ class KotlinWebsiteSamplesTransformer(context: DokkaContext): SamplesTransformer
val pw = PrintWriter(sw)
it.e.printStackTrace(pw)
this@KotlinWebsiteSamplesTransformer.context.logger.error("${containingFile.name}: (${it.loc}): Exception thrown while converting \n```\n${it.text}\n```\n$sw")
this@KotlinWebsiteSampleProvider.context.logger.error("${containingFile.name}: (${it.loc}): Exception thrown while converting \n```\n${it.text}\n```\n$sw")
}
return sampleBuilder.text
}
@@ -165,7 +172,7 @@ class KotlinWebsiteSamplesTransformer(context: DokkaContext): SamplesTransformer
override fun processImports(psiElement: PsiElement): String {
val psiFile = psiElement.containingFile
return when(val text = psiFile.safeAs<KtFile>()?.importList) {
return when(val text = (psiFile as? KtFile)?.importList) {
is KtImportList -> text.let {
it.allChildren.filter {
it !is KtImportDirective || it.importPath !in importsToIgnore
@@ -1,19 +1,23 @@
package org.jetbrains.dokka.kotlinlang
import org.jetbrains.dokka.CoreExtensions
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.InternalDokkaApi
import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.CompilerDescriptorAnalysisPlugin
import org.jetbrains.dokka.analysis.kotlin.internal.InternalKotlinAnalysisPlugin
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.jetbrains.dokka.plugability.DokkaPluginApiPreview
import org.jetbrains.dokka.plugability.PluginApiPreviewAcknowledgement
import org.jetbrains.dokka.plugability.querySingle
class SamplesTransformerPlugin : DokkaPlugin() {
private val dokkaBase by lazy { plugin<DokkaBase>() }
@OptIn(InternalDokkaApi::class)
private val dokkaKotlinAnalysisPlugin by lazy { plugin<InternalKotlinAnalysisPlugin>() }
@OptIn(InternalDokkaApi::class)
private val dokkaDescriptorAnalysisPlugin by lazy { plugin<CompilerDescriptorAnalysisPlugin>() }
@OptIn(InternalDokkaApi::class)
@Suppress("unused")
val kotlinWebsiteSamplesTransformer by extending {
CoreExtensions.pageTransformer providing ::KotlinWebsiteSamplesTransformer override dokkaBase.defaultSamplesTransformer order {
before(dokkaBase.pageMerger)
}
dokkaKotlinAnalysisPlugin.sampleProviderFactory providing ::KotlinWebsiteSampleProviderFactory override dokkaDescriptorAnalysisPlugin.kotlinSampleProviderFactory
}
@DokkaPluginApiPreview
@@ -1,17 +0,0 @@
plugins {
id 'org.jetbrains.kotlin.jvm'
}
description "Dokka Plugin to configure Dokka for stdlib"
final String dokka_version = property("dokka_version")
dependencies {
implementation "org.jetbrains.dokka:dokka-base:$dokka_version"
compileOnly "org.jetbrains.dokka:dokka-core:$dokka_version"
compileOnly "org.jetbrains.dokka:dokka-analysis:$dokka_version"
}
kotlin {
jvmToolchain(8)
}
@@ -1,5 +0,0 @@
package org.jetbrains.dokka.kotlinlang
import org.jetbrains.dokka.plugability.ConfigurableBlock
data class StdLibAnalysisConfiguration(val ignoreCommonBuiltIns: Boolean) : ConfigurableBlock
@@ -1,33 +0,0 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.dokka.kotlinlang
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.jetbrains.dokka.analysis.DokkaAnalysisConfiguration
import org.jetbrains.dokka.analysis.ProjectKotlinAnalysis
import org.jetbrains.dokka.plugability.DokkaPluginApiPreview
import org.jetbrains.dokka.plugability.PluginApiPreviewAcknowledgement
import org.jetbrains.dokka.plugability.configuration
class StdLibConfigurationPlugin : DokkaPlugin() {
private val dokkaBase by lazy { plugin<DokkaBase>() }
@Suppress("unused")
val stdLibKotlinAnalysis by extending {
dokkaBase.kotlinAnalysis providing { ctx ->
val ignoreCommonBuiltIns = configuration<StdLibConfigurationPlugin, StdLibAnalysisConfiguration>(ctx)?.ignoreCommonBuiltIns ?: false
ProjectKotlinAnalysis(
sourceSets = ctx.configuration.sourceSets,
logger = ctx.logger,
analysisConfiguration = DokkaAnalysisConfiguration(ignoreCommonBuiltIns = ignoreCommonBuiltIns)
)
} override dokkaBase.defaultKotlinAnalysis
}
@DokkaPluginApiPreview
override fun pluginApiPreviewAcknowledgement(): PluginApiPreviewAcknowledgement = PluginApiPreviewAcknowledgement
}
@@ -8,7 +8,6 @@ final String dokka_version = property("dokka_version")
dependencies {
implementation "org.jetbrains.dokka:dokka-base:$dokka_version"
compileOnly "org.jetbrains.dokka:dokka-core:$dokka_version"
compileOnly "org.jetbrains.dokka:dokka-analysis:$dokka_version"
testImplementation 'org.jetbrains.kotlin:kotlin-test'}
kotlin {
@@ -8,7 +8,6 @@ import org.jetbrains.dokka.model.doc.Text
import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.plugability.configuration
import org.jetbrains.dokka.transformers.documentation.DocumentableTransformer
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
class VersionFilterTransformer(private val dokkaContext: DokkaContext) :
DocumentableTransformer {
@@ -120,4 +119,6 @@ class VersionFilterTransformer(private val dokkaContext: DokkaContext) :
return documentation[sourceSet]?.children?.find { it is CustomTagWrapper && it.name == "Since Kotlin" }
?.let { (it.children[0] as? Text)?.body?.let { txt -> SinceKotlinVersion(txt) } }
}
inline fun <T, C : Collection<T>, O> C.ifNotEmpty(body: C.() -> O?): O? = if (isNotEmpty()) this.body() else null
}