diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt index a23fb41037..a6f13abb8f 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt @@ -31,14 +31,14 @@ 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", @@ -46,7 +46,8 @@ class BasicGradleIntegrationTest : AbstractGradleIntegrationTest() { "dokkaGfm", "dokkaJekyll", "-i", - "-s" + "-s", + extraParameter ).buildRelaxed() assertEquals(expectedOutcome, assertNotNull(result.task(":dokkaHtml")).outcome) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt index f097807b65..5ca324187f 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt @@ -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") diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt index 54ac3ff8ab..58387534a4 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt @@ -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) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt index 59736344be..c6110a31bc 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt @@ -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) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt index d8f5cee254..f890c4867a 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt @@ -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") @@ -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) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt index e4634c0911..cd7b5706a0 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt @@ -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 { @@ -70,3 +72,12 @@ abstract class TestedVersionsArgumentsProvider(private val buildVersions: List) : ArgumentsProvider { + override fun provideArguments(context: ExtensionContext?): Stream { + return (buildVersions.map { Arguments.of(it, "") } + buildVersions.map { Arguments.of(it, useK2PropertyCLIArgument) }).stream() + } +} diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/CoroutinesGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/CoroutinesGradleIntegrationTest.kt index 6f0d91882a..bb63c532ac 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/CoroutinesGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/CoroutinesGradleIntegrationTest.kt @@ -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 { - 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") } @@ -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() diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/SerializationGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/SerializationGradleIntegrationTest.kt index ff2849b8db..35d8f63f9b 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/SerializationGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/kotlin/SerializationGradleIntegrationTest.kt @@ -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 { - return buildVersions.stream().map { Arguments.of(it) } - } -} +internal class SerializationBuildVersionsArgumentsProvider : + TestedVersionsWithK2SwitcherArgumentsProvider(buildVersions) class SerializationGradleIntegrationTest : AbstractGradleIntegrationTest(), TestOutputCopier { @@ -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) diff --git a/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt b/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt index f2b2857850..3a34632fcd 100644 --- a/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt @@ -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) } diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaArtifacts.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaArtifacts.kt index 773d93ab92..241c0449cf 100644 --- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaArtifacts.kt +++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaArtifacts.kt @@ -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") diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaPlugin.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaPlugin.kt index be2a6603c3..f883f54626 100644 --- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaPlugin.kt +++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaPlugin.kt @@ -18,6 +18,8 @@ open class DokkaPlugin : Plugin { 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" diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/gradleConfigurations.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/gradleConfigurations.kt index 69bb22635d..3ca7c1a0d9 100644 --- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/gradleConfigurations.kt +++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/gradleConfigurations.kt @@ -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)) @@ -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) } diff --git a/subprojects/analysis-kotlin-symbols/build.gradle.kts b/subprojects/analysis-kotlin-symbols/build.gradle.kts index b6626f9285..1f5a61a056 100644 --- a/subprojects/analysis-kotlin-symbols/build.gradle.kts +++ b/subprojects/analysis-kotlin-symbols/build.gradle.kts @@ -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) @@ -82,7 +82,6 @@ dependencies { // TODO [beresnev] get rid of it compileOnly(libs.kotlinx.coroutines.core) - } tasks {