From 019cef47f1bf993a7a25ec73e88b1d9da25528eb Mon Sep 17 00:00:00 2001 From: Vadim Mishenev Date: Wed, 9 Feb 2022 15:59:40 +0300 Subject: [PATCH] Add KotlinWebSite plugin to transform samples (#2349) --- .../build.gradle | 19 +++++++++++++++++++ .../KotlinWebsiteSamplesTransformer.kt | 4 ++-- .../kotlinlang/SamplesTransformerPlugin.kt | 15 +++++++++++++++ ...rg.jetbrains.dokka.plugability.DokkaPlugin | 1 + .../gradle/projects/stdlib/stdlib.diff | 12 +++++++----- .../kotlin/StdlibGradleIntegrationTest.kt | 13 ++++++++++++- plugins/base/api/base.api | 7 ------- 7 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/build.gradle rename {plugins/base/src/main/kotlin/transformers/pages/samples => integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang}/KotlinWebsiteSamplesTransformer.kt (98%) create mode 100644 integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/SamplesTransformerPlugin.kt create mode 100644 integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin diff --git a/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/build.gradle b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/build.gradle new file mode 100644 index 0000000000..3ab3e09bae --- /dev/null +++ b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/build.gradle @@ -0,0 +1,19 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' +} +description "Dokka Plugin to transform the samples from stdlib" + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation "org.jetbrains.dokka:dokka-base:${dokka_it_kotlin_version}" + compileOnly "org.jetbrains.dokka:dokka-core:${dokka_it_kotlin_version}" +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { + kotlinOptions.jvmTarget = "1.8" +} + diff --git a/plugins/base/src/main/kotlin/transformers/pages/samples/KotlinWebsiteSamplesTransformer.kt b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/KotlinWebsiteSamplesTransformer.kt similarity index 98% rename from plugins/base/src/main/kotlin/transformers/pages/samples/KotlinWebsiteSamplesTransformer.kt rename to integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/KotlinWebsiteSamplesTransformer.kt index 5babc289ca..9d5115cd55 100644 --- a/plugins/base/src/main/kotlin/transformers/pages/samples/KotlinWebsiteSamplesTransformer.kt +++ b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/KotlinWebsiteSamplesTransformer.kt @@ -1,4 +1,4 @@ -package org.jetbrains.dokka.base.transformers.pages.samples +package org.jetbrains.dokka.kotlinlang import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement @@ -6,6 +6,7 @@ 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.plugability.DokkaContext import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.allChildren @@ -16,7 +17,6 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.io.PrintWriter import java.io.StringWriter -// TODO Inspect below class for any bugs. Big chunk of was ripped from 0.10.1 class KotlinWebsiteSamplesTransformer(context: DokkaContext): SamplesTransformer(context) { private class SampleBuilder : KtTreeVisitorVoid() { diff --git a/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/SamplesTransformerPlugin.kt b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/SamplesTransformerPlugin.kt new file mode 100644 index 0000000000..e39a3cdaa6 --- /dev/null +++ b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/kotlin/org/jetbrains/dokka/kotlinlang/SamplesTransformerPlugin.kt @@ -0,0 +1,15 @@ +package org.jetbrains.dokka.kotlinlang + +import org.jetbrains.dokka.CoreExtensions +import org.jetbrains.dokka.base.DokkaBase +import org.jetbrains.dokka.plugability.DokkaPlugin + +class SamplesTransformerPlugin : DokkaPlugin() { + private val dokkaBase by lazy { plugin() } + + val kotlinWebsiteSamplesTransformer by extending { + CoreExtensions.pageTransformer providing ::KotlinWebsiteSamplesTransformer override dokkaBase.defaultSamplesTransformer order { + before(dokkaBase.pageMerger) + } + } +} \ No newline at end of file diff --git a/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin new file mode 100644 index 0000000000..2ac2cd5ff7 --- /dev/null +++ b/integration-tests/gradle/projects/stdlib/dokka-samples-transformer-plugin/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin @@ -0,0 +1 @@ +org.jetbrains.dokka.kotlinlang.SamplesTransformerPlugin \ No newline at end of file diff --git a/integration-tests/gradle/projects/stdlib/stdlib.diff b/integration-tests/gradle/projects/stdlib/stdlib.diff index c009e788bf..71d27c9925 100644 --- a/integration-tests/gradle/projects/stdlib/stdlib.diff +++ b/integration-tests/gradle/projects/stdlib/stdlib.diff @@ -37,7 +37,7 @@ diff --git a/build.gradle b/build.gradle index aa8f21b..dd6a2ae 100644 --- a/build.gradle +++ b/build.gradle -@@ -1,80 +1,424 @@ +@@ -1,80 +1,428 @@ +import org.jetbrains.dokka.Platform + plugins { @@ -74,10 +74,11 @@ index aa8f21b..dd6a2ae 100644 + jcenter() } --dependencies { + dependencies { - dokka "org.jetbrains.dokka:dokka-fatjar:$dokka_version" --} -- ++ dokkaPlugin project(":dokka-samples-transformer-plugin") + } + -final File dokkaHome = new File(buildDir, "dokka-home") -task setupDokka(type: Sync) { - from configurations.dokka @@ -542,7 +543,7 @@ diff --git a/settings.gradle b/settings.gradle index 5209245..bd38b18 100644 --- a/settings.gradle +++ b/settings.gradle -@@ -1,5 +1,18 @@ +@@ -1,5 +1,19 @@ +pluginManagement { + resolutionStrategy { + eachPlugin { @@ -562,3 +563,4 @@ index 5209245..bd38b18 100644 include 'kotlin_native' include 'kotlin_big' -include 'ant' ++include 'dokka-samples-transformer-plugin' \ No newline at end of file diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/StdlibGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/StdlibGradleIntegrationTest.kt index 4f56ba553a..a5b61b1d4c 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/StdlibGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/StdlibGradleIntegrationTest.kt @@ -3,7 +3,8 @@ package org.jetbrains.dokka.it.gradle.kotlin import org.gradle.testkit.runner.TaskOutcome import org.jetbrains.dokka.it.S3Project import org.jetbrains.dokka.it.copyAndApplyGitDiff -import org.jetbrains.dokka.it.gradle.* +import org.jetbrains.dokka.it.gradle.AbstractGradleIntegrationTest +import org.jetbrains.dokka.it.gradle.BuildVersions import org.junit.runners.Parameterized import java.io.File import kotlin.test.* @@ -28,6 +29,16 @@ class StdlibGradleIntegrationTest(override val versions: BuildVersions) : Abstra templateProjectDir.listFiles().orEmpty() .forEach { topLevelFile -> topLevelFile.copyRecursively(File(projectDir, topLevelFile.name)) } + val pluginDir = File("projects", "stdlib/dokka-samples-transformer-plugin") + pluginDir.listFiles().orEmpty() + .forEach { topLevelFile -> + topLevelFile.copyRecursively( + File( + projectDir.resolve("dokka-samples-transformer-plugin").also { it.mkdir() }, topLevelFile.name + ) + ) + } + copyAndApplyGitDiff(File("projects", "stdlib/stdlib.diff")) } diff --git a/plugins/base/api/base.api b/plugins/base/api/base.api index e2f61c69cb..488d2d8d65 100644 --- a/plugins/base/api/base.api +++ b/plugins/base/api/base.api @@ -1230,13 +1230,6 @@ public final class org/jetbrains/dokka/base/transformers/pages/samples/DefaultSa public fun processImports (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; } -public final class org/jetbrains/dokka/base/transformers/pages/samples/KotlinWebsiteSamplesTransformer : org/jetbrains/dokka/base/transformers/pages/samples/SamplesTransformer { - public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V - public final fun getImportsToIgnore ()Ljava/util/List; - public fun processBody (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; - public fun processImports (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; -} - public abstract class org/jetbrains/dokka/base/transformers/pages/samples/SamplesTransformer : org/jetbrains/dokka/transformers/pages/PageTransformer { public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V protected fun createSampleBody (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;