Skip to content

Commit

Permalink
Add K2 analysis switcher
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed Nov 2, 2023
1 parent 2b0a63f commit 786de04
Show file tree
Hide file tree
Showing 13 changed files with 69 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,23 @@ class BasicGradleIntegrationTest : AbstractGradleIntegrationTest() {
}
}

@ParameterizedTest(name = "{0}")
@ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
runAndAssertOutcome(buildVersions, TaskOutcome.SUCCESS)
runAndAssertOutcome(buildVersions, TaskOutcome.UP_TO_DATE)
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(AllSupportedTestedVersionsWithK2SwitcherArgumentsProvider::class)
fun execute(buildVersions: BuildVersions, extraParameter: String) {
runAndAssertOutcome(buildVersions, TaskOutcome.SUCCESS, extraParameter)
runAndAssertOutcome(buildVersions, TaskOutcome.UP_TO_DATE, extraParameter)
}

private fun runAndAssertOutcome(buildVersions: BuildVersions, expectedOutcome: TaskOutcome) {
private fun runAndAssertOutcome(buildVersions: BuildVersions, expectedOutcome: TaskOutcome, extraParameter: String) {
val result = createGradleRunner(
buildVersions,
"dokkaHtml",
"dokkaJavadoc",
"dokkaGfm",
"dokkaJekyll",
"-i",
"-s"
"-s",
extraParameter
).buildRelaxed()

assertEquals(expectedOutcome, assertNotNull(result.task(":dokkaHtml")).outcome)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,16 @@ class JsIRGradleIntegrationTest : AbstractGradleIntegrationTest() {
File(templateProjectDir, "src").copyRecursively(File(projectDir, "src"))
}

@ParameterizedTest(name = "{0}")
@ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(AllSupportedTestedVersionsWithK2SwitcherArgumentsProvider::class)
fun execute(buildVersions: BuildVersions, extraParameter: String) {
if (ignoredKotlinVersions.contains(buildVersions.kotlinVersion)) {
return
}

val reactVersion = TestedVersions.KT_REACT_WRAPPER_MAPPING[buildVersions.kotlinVersion]
?: throw IllegalStateException("Unspecified version of react for kotlin " + buildVersions.kotlinVersion)
val result = createGradleRunner(buildVersions, "-Preact_version=$reactVersion", "dokkaHtml", "-i", "-s").buildRelaxed()
val result = createGradleRunner(buildVersions, "-Preact_version=$reactVersion", "dokkaHtml", "-i", "-s", extraParameter).buildRelaxed()
assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtml")).outcome)

val htmlOutputDir = File(projectDir, "build/dokka/html")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ class MultiModule0IntegrationTest : AbstractGradleIntegrationTest() {
File(templateProjectDir, "moduleA").copyRecursively(File(projectDir, "moduleA"))
}

@ParameterizedTest(name = "{0}")
@ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(AllSupportedTestedVersionsWithK2SwitcherArgumentsProvider::class)
fun execute(buildVersions: BuildVersions, extraParameter: String) {
val result = createGradleRunner(
buildVersions,
":moduleA:dokkaHtmlMultiModule",
":moduleA:dokkaGfmMultiModule",
":moduleA:dokkaJekyllMultiModule",
"-i", "-s"
"-i", "-s", extraParameter
).buildRelaxed()

assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":moduleA:dokkaHtmlMultiModule")).outcome)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ class MultiModule1IntegrationTest : AbstractGradleIntegrationTest() {
File(templateProjectDir, "second").copyRecursively(File(projectDir, "second"))
}

@ParameterizedTest(name = "{0}")
@ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(AllSupportedTestedVersionsWithK2SwitcherArgumentsProvider::class)
fun execute(buildVersions: BuildVersions, extraParameter: String) {
val result = createGradleRunner(
buildVersions,
":second:dokkaHtml",
"-i", "-s"
"-i", "-s", extraParameter
).buildRelaxed()

assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":second:dokkaHtml")).outcome)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ class Multiplatform0GradleIntegrationTest : AbstractGradleIntegrationTest() {
File(templateProjectDir, "src").copyRecursively(File(projectDir, "src"))
}

@ParameterizedTest(name = "{0}")
@ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(AllSupportedTestedVersionsWithK2SwitcherArgumentsProvider::class)
fun execute(buildVersions: BuildVersions, extraParameter: String) {
// `enableGranularSourceSetsMetadata` and `enableDependencyPropagation` flags are enabled by default since 1.6.20.
// remove when this test is executed with Kotlin >= 1.6.20
val result = if (buildVersions.kotlinVersion < "1.6.20")
Expand All @@ -36,10 +36,11 @@ class Multiplatform0GradleIntegrationTest : AbstractGradleIntegrationTest() {
"-i",
"-s",
"-Pkotlin.mpp.enableGranularSourceSetsMetadata=true",
"-Pkotlin.native.enableDependencyPropagation=false"
"-Pkotlin.native.enableDependencyPropagation=false",
extraParameter
).buildRelaxed()
else
createGradleRunner(buildVersions, "dokkaHtml", "-i", "-s").buildRelaxed()
createGradleRunner(buildVersions, "dokkaHtml", "-i", "-s", extraParameter).buildRelaxed()

assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtml")).outcome)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.ArgumentsProvider
import java.util.stream.Stream

const val useK2PropertyCLIArgument = "-Porg.jetbrains.dokka.useK2=true"
internal class LatestTestedVersionsArgumentsProvider : TestedVersionsArgumentsProvider(listOf(TestedVersions.LATEST))
internal open class AllSupportedTestedVersionsArgumentsProvider : TestedVersionsArgumentsProvider(TestedVersions.ALL_SUPPORTED)
internal open class AllSupportedTestedVersionsWithK2SwitcherArgumentsProvider : TestedVersionsWithK2SwitcherArgumentsProvider(listOf(TestedVersions.LATEST))

internal object TestedVersions {

Expand Down Expand Up @@ -70,3 +72,12 @@ abstract class TestedVersionsArgumentsProvider(private val buildVersions: List<B
return buildVersions.stream().map { Arguments.of(it) }
}
}

/**
* The first argument is [BuildVersions], the second one is an extra CLI argument for Gradle
*/
internal abstract class TestedVersionsWithK2SwitcherArgumentsProvider(private val buildVersions: List<BuildVersions>) : ArgumentsProvider {
override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> {
return (buildVersions.map { Arguments.of(it, "") } + buildVersions.map { Arguments.of(it, useK2PropertyCLIArgument) }).stream()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,22 @@ import org.jetbrains.dokka.it.TestOutputCopier
import org.jetbrains.dokka.it.copyAndApplyGitDiff
import org.jetbrains.dokka.it.gradle.AbstractGradleIntegrationTest
import org.jetbrains.dokka.it.gradle.BuildVersions
import org.junit.jupiter.api.extension.ExtensionContext
import org.jetbrains.dokka.it.gradle.TestedVersionsWithK2SwitcherArgumentsProvider
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.ArgumentsProvider
import org.junit.jupiter.params.provider.ArgumentsSource
import java.io.File
import java.util.stream.Stream
import kotlin.test.BeforeTest
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue

class CoroutinesBuildVersionsArgumentsProvider : ArgumentsProvider {
private val buildVersions = BuildVersions.permutations(
gradleVersions = listOf("7.4.2"),
kotlinVersions = listOf("1.8.10")
)

override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> {
return buildVersions.stream().map { Arguments.of(it) }
}
}
private val buildVersions = BuildVersions.permutations(
gradleVersions = listOf("7.4.2"),
kotlinVersions = listOf("1.8.10")
)

internal class CoroutinesBuildVersionsArgumentsProvider :
TestedVersionsWithK2SwitcherArgumentsProvider(buildVersions)
class CoroutinesGradleIntegrationTest : AbstractGradleIntegrationTest(), TestOutputCopier {

override val projectOutputLocation: File by lazy { File(projectDir, "build/dokka/htmlMultiModule") }
Expand All @@ -45,12 +38,12 @@ class CoroutinesGradleIntegrationTest : AbstractGradleIntegrationTest(), TestOut
copyAndApplyGitDiff(File("projects", "coroutines/coroutines.diff"))
}

@ParameterizedTest(name = "{0}")
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(CoroutinesBuildVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
fun execute(buildVersions: BuildVersions, extraParameter: String) {
val result = createGradleRunner(
buildVersions,
":dokkaHtmlMultiModule", "-i", "-s",
":dokkaHtmlMultiModule", "-i", "-s", extraParameter,
jvmArgs = listOf("-Xmx2G", "-XX:MaxMetaspaceSize=500m")
).buildRelaxed()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,22 @@ import org.jetbrains.dokka.it.TestOutputCopier
import org.jetbrains.dokka.it.copyAndApplyGitDiff
import org.jetbrains.dokka.it.gradle.AbstractGradleIntegrationTest
import org.jetbrains.dokka.it.gradle.BuildVersions
import org.junit.jupiter.api.extension.ExtensionContext
import org.jetbrains.dokka.it.gradle.TestedVersionsWithK2SwitcherArgumentsProvider
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.ArgumentsProvider
import org.junit.jupiter.params.provider.ArgumentsSource
import java.io.File
import java.util.stream.Stream
import kotlin.test.BeforeTest
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue

class SerializationBuildVersionsArgumentsProvider : ArgumentsProvider {
private val buildVersions = BuildVersions.permutations(
gradleVersions = listOf("7.6.1"),
kotlinVersions = listOf("1.9.0")
)
private val buildVersions = BuildVersions.permutations(
gradleVersions = listOf("7.6.1"),
kotlinVersions = listOf("1.9.0")
)

override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> {
return buildVersions.stream().map { Arguments.of(it) }
}
}
internal class SerializationBuildVersionsArgumentsProvider :
TestedVersionsWithK2SwitcherArgumentsProvider(buildVersions)

class SerializationGradleIntegrationTest : AbstractGradleIntegrationTest(), TestOutputCopier {

Expand All @@ -44,10 +38,10 @@ class SerializationGradleIntegrationTest : AbstractGradleIntegrationTest(), Test
copyAndApplyGitDiff(File("projects", "serialization/serialization.diff"))
}

@ParameterizedTest(name = "{0}")
@ParameterizedTest(name = "{0} {1}")
@ArgumentsSource(SerializationBuildVersionsArgumentsProvider::class)
fun execute(buildVersions: BuildVersions) {
val result = createGradleRunner(buildVersions, ":dokkaHtmlMultiModule", "-i", "-s").buildRelaxed()
fun execute(buildVersions: BuildVersions, extraParameter: String) {
val result = createGradleRunner(buildVersions, ":dokkaHtmlMultiModule", "-i", "-s", extraParameter).buildRelaxed()

assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtmlMultiModule")).outcome)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public abstract class AbstractGradleIntegrationTest : AbstractIntegrationTest()
"-Pdokka_it_android_gradle_plugin_version=$androidVersion"
},
* arguments
)
).filter { it.isNotBlank() }
).run { this as DefaultGradleRunner }
.withJvmArguments(jvmArgs)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ internal class DokkaArtifacts(private val project: Project) {

// TODO [beresnev] analysis switcher
val analysisKotlinDescriptors get() = fromModuleName("analysis-kotlin-descriptors")
val analysisKotlinSymbols get() = fromModuleName("analysis-kotlin-symbols")

val allModulesPage get() = fromModuleName("all-modules-page-plugin")
val dokkaCore get() = fromModuleName("dokka-core")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ open class DokkaPlugin : Plugin<Project> {
if (GradleVersion.version(project.gradle.gradleVersion) < GradleVersion.version("5.6")) {
project.logger.warn("Dokka: Build is using unsupported gradle version, expected at least 5.6 but got ${project.gradle.gradleVersion}. This may result in strange errors")
}
if (project.shouldUseK2())
project.logger.info("K2 Analysis is using")

project.setupDokkaTasks("dokkaHtml") {
description = "Generates documentation in 'html' format"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import org.gradle.api.artifacts.Dependency
import org.gradle.api.attributes.Usage
import org.gradle.kotlin.dsl.named

internal fun Project.shouldUseK2() =
(findProperty("org.jetbrains.dokka.useK2") as? String)?.toBoolean() ?: false

internal fun Project.maybeCreateDokkaDefaultPluginConfiguration(): Configuration {
return configurations.maybeCreate("dokkaPlugin") {
attributes.attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_RUNTIME))
Expand All @@ -29,7 +32,10 @@ internal fun Project.maybeCreateDokkaPluginConfiguration(dokkaTaskName: String,
extendsFrom(maybeCreateDokkaDefaultPluginConfiguration())
attributes.attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_RUNTIME))
isCanBeConsumed = false
dependencies.add(project.dokkaArtifacts.analysisKotlinDescriptors)
dependencies.add(
if (shouldUseK2()) project.dokkaArtifacts.analysisKotlinSymbols
else project.dokkaArtifacts.analysisKotlinDescriptors
)
dependencies.add(project.dokkaArtifacts.dokkaBase)
dependencies.addAll(additionalDependencies)
}
Expand Down
3 changes: 1 addition & 2 deletions subprojects/analysis-kotlin-symbols/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ plugins {

dependencies {
compileOnly(projects.core)
compileOnly(projects.subprojects.analysisKotlinApi)
implementation(projects.subprojects.analysisKotlinApi)

implementation(projects.subprojects.analysisMarkdownJb)
implementation(projects.subprojects.analysisJavaPsi)
Expand Down Expand Up @@ -82,7 +82,6 @@ dependencies {

// TODO [beresnev] get rid of it
compileOnly(libs.kotlinx.coroutines.core)

}

tasks {
Expand Down

0 comments on commit 786de04

Please sign in to comment.