From 196fb3e5f150e51604dd5e8145f05f50c6293bc5 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Fri, 18 Aug 2023 16:20:33 +0200 Subject: [PATCH] [Gradle] Split K1/K2 integration tests #KT-60588 In Progress --- .../gradle/CompilerPluginsIncrementalIT.kt | 23 +++++++-- .../IncrementalCompilationMultiProjectIT.kt | 44 +++++++++++----- .../kotlin/gradle/IncrementalJavaChangeIT.kt | 51 ++++++++++++++++--- .../Kotlin2JsIrBeIncrementalCompilationIT.kt | 17 ++++--- .../KotlinJsIncrementalGradlePluginIT.kt | 17 +++---- .../gradle/KotlinJsLibraryGradlePluginIT.kt | 4 +- .../jetbrains/kotlin/gradle/ScriptingIT.kt | 12 ++++- .../kotlin/gradle/testbase/BuildOptions.kt | 10 ++++ 8 files changed, 134 insertions(+), 44 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerPluginsIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerPluginsIncrementalIT.kt index 2ce966029a4..0ca7df6f448 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerPluginsIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerPluginsIncrementalIT.kt @@ -14,7 +14,7 @@ import kotlin.io.path.exists @DisplayName("Compiler plugin incremental compilation") @OtherGradlePluginTests -open class CompilerPluginsIncrementalIT : KGPBaseTest() { +abstract class CompilerPluginsIncrementalIT : KGPBaseTest() { override val defaultBuildOptions: BuildOptions get() = super.defaultBuildOptions.copy( incremental = true @@ -23,7 +23,7 @@ open class CompilerPluginsIncrementalIT : KGPBaseTest() { @DisabledOnOs(OS.WINDOWS, disabledReason = "Kotlin compiler holds an open file descriptor to plugin jar file") @DisplayName("KT-38570: After changing compiler plugin code, next incremental build picks it up") @GradleTest - internal fun afterChangeInPluginBuildDoesIncrementalProcessing(gradleVersion: GradleVersion) { + fun afterChangeInPluginBuildDoesIncrementalProcessing(gradleVersion: GradleVersion) { project("incrementalChangeInPlugin".prefix, gradleVersion) { build("assemble") @@ -69,7 +69,24 @@ open class CompilerPluginsIncrementalIT : KGPBaseTest() { private val String.prefix get() = "compilerPlugins/$this" } +class CompilerPluginsK1IncrementalIT : CompilerPluginsIncrementalIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +class CompilerPluginsK2IncrementalIT : CompilerPluginsIncrementalIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() +} + @DisplayName("Compiler plugin incremental compilation with precise compilation outputs backup") -class CompilerPluginsIncrementalWithPreciseBackupIT : CompilerPluginsIncrementalIT() { +abstract class CompilerPluginsIncrementalWithPreciseBackupIT : CompilerPluginsIncrementalIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true, keepIncrementalCompilationCachesInMemory = true) +} + +@DisplayName("Compiler plugin incremental compilation with precise compilation outputs backup") +class CompilerPluginsK1IncrementalWithPreciseBackupIT : CompilerPluginsIncrementalWithPreciseBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +class CompilerPluginsK2IncrementalWithPreciseBackupIT : CompilerPluginsIncrementalWithPreciseBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt index a260844448d..6429f87565c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt @@ -13,7 +13,7 @@ import java.nio.file.Path import kotlin.io.path.* @JsGradlePluginTests -open class IncrementalCompilationJsMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { +abstract class IncrementalCompilationJsMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { override val defaultProjectName: String = "incrementalMultiproject" override fun defaultProject( @@ -151,24 +151,28 @@ open class IncrementalCompilationJsMultiProjectIT : BaseIncrementalCompilationMu } } -open class IncrementalCompilationJsMultiProjectWithPreciseBackupIT : IncrementalCompilationJsMultiProjectIT() { +abstract class IncrementalCompilationJsMultiProjectWithPreciseBackupIT : IncrementalCompilationJsMultiProjectIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true, keepIncrementalCompilationCachesInMemory = true) } -class IncrementalCompilationFirJsMultiProject : IncrementalCompilationJsMultiProjectIT() { - override val defaultBuildOptions = super.defaultBuildOptions.copy( - languageVersion = "2.0" - ) +class IncrementalCompilationK1JsMultiProject : IncrementalCompilationJsMultiProjectIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() } -class IncrementalCompilationFirJsMultiProjectWithPreciseBackupIT : IncrementalCompilationJsMultiProjectWithPreciseBackupIT() { - override val defaultBuildOptions = super.defaultBuildOptions.copy( - languageVersion = "2.0" - ) +class IncrementalCompilationK2JsMultiProject : IncrementalCompilationJsMultiProjectIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() +} + +class IncrementalCompilationK1JsMultiProjectWithPreciseBackupIT : IncrementalCompilationJsMultiProjectWithPreciseBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +class IncrementalCompilationK2JsMultiProjectWithPreciseBackupIT : IncrementalCompilationJsMultiProjectWithPreciseBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() } @JvmGradlePluginTests -open class IncrementalCompilationJvmMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { +abstract class IncrementalCompilationJvmMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { override val additionalLibDependencies: String = "implementation \"org.jetbrains.kotlin:kotlin-test:${'$'}kotlin_version\"" @@ -324,12 +328,24 @@ open class IncrementalCompilationJvmMultiProjectIT : BaseIncrementalCompilationM } } -class IncrementalCompilationJvmMultiProjectWithPreciseBackupIT : IncrementalCompilationJvmMultiProjectIT() { +abstract class IncrementalCompilationJvmMultiProjectWithPreciseBackupIT : IncrementalCompilationJvmMultiProjectIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true, keepIncrementalCompilationCachesInMemory = true) } -class IncrementalCompilationFirJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { - override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(languageVersion = "2.0") +class IncrementalCompilationK1JvmMultiProjectWithPreciseBackupIT : IncrementalCompilationJvmMultiProjectWithPreciseBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +class IncrementalCompilationK2JvmMultiProjectWithPreciseBackupIT : IncrementalCompilationJvmMultiProjectWithPreciseBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() +} + +class IncrementalCompilationK1JvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { + override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +class IncrementalCompilationK2JvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { + override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copyEnsuringK2() } open class IncrementalCompilationOldICJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt index ac879ea9f19..09ea5a209b9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt @@ -13,7 +13,7 @@ import kotlin.io.path.* import kotlin.test.assertTrue @DisplayName("Default incremental compilation with default precise java tracking") -open class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = null) { +abstract class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = null) { @DisplayName("Lib: tracked method signature ABI change") @GradleTest @@ -91,13 +91,33 @@ open class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBas } } +@DisplayName("Default incremental compilation with default precise java tracking on K1") +class IncrementalK1JavaChangeDefaultIT : IncrementalJavaChangeDefaultIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +@DisplayName("Default incremental compilation with default precise java tracking on K2") +class IncrementalK2JavaChangeDefaultIT : IncrementalJavaChangeDefaultIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() +} + @DisplayName("Default incremental compilation with precise compilation outputs backup") -open class IncrementalJavaChangePreciseCompilationBackupIT : IncrementalJavaChangeDefaultIT() { +abstract class IncrementalJavaChangePreciseCompilationBackupIT : IncrementalJavaChangeDefaultIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true, keepIncrementalCompilationCachesInMemory = true) } -@DisplayName("Incremental compilation via classpath snapshots with default precise java tracking") -class IncrementalJavaChangeOldICIT : IncrementalJavaChangeDefaultIT() { +@DisplayName("Default incremental compilation with precise compilation outputs backup on K1") +class IncrementalK1JavaChangePreciseCompilationBackupIT : IncrementalJavaChangePreciseCompilationBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +@DisplayName("Default incremental compilation with precise compilation outputs backup on K2") +class IncrementalK2JavaChangePreciseCompilationBackupIT : IncrementalJavaChangePreciseCompilationBackupIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() +} + +@DisplayName("Incremental compilation via history files with default precise java tracking") +abstract class IncrementalJavaChangeOldICIT : IncrementalJavaChangeDefaultIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy(useGradleClasspathSnapshot = false) @@ -153,6 +173,16 @@ class IncrementalJavaChangeOldICIT : IncrementalJavaChangeDefaultIT() { } } +@DisplayName("Incremental compilation via history files with default precise java tracking with K1") +class IncrementalK1JavaChangeOldICIT : IncrementalJavaChangeOldICIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +@DisplayName("Incremental compilation via history files with default precise java tracking with K2") +class IncrementalK2JavaChangeOldICIT : IncrementalJavaChangeOldICIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() +} + @DisplayName("Default incremental compilation with enabled precise java tracking") class IncrementalJavaChangePreciseIT : IncrementalCompilationJavaChangesBase( usePreciseJavaTracking = true @@ -191,7 +221,7 @@ class IncrementalJavaChangePreciseIT : IncrementalCompilationJavaChangesBase( } @DisplayName("Default incremental compilation with disabled precise java tracking") -open class IncrementalJavaChangeDisablePreciseIT : IncrementalCompilationJavaChangesBase( +abstract class IncrementalJavaChangeDisablePreciseIT : IncrementalCompilationJavaChangesBase( usePreciseJavaTracking = false ) { @DisplayName("Lib: tracked method signature ABI change") @@ -237,9 +267,14 @@ open class IncrementalJavaChangeDisablePreciseIT : IncrementalCompilationJavaCha } } -@DisplayName("Default incremental compilation with disabled precise java tracking and enabled FIR") -class IncrementalFirJavaChangeDisablePreciseIT : IncrementalJavaChangeDisablePreciseIT() { - override val defaultBuildOptions = super.defaultBuildOptions.copy(languageVersion = "2.0") +@DisplayName("Default incremental compilation with disabled precise java tracking and enabled K1") +class IncrementalK1JavaChangeDisablePreciseIT : IncrementalJavaChangeDisablePreciseIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +@DisplayName("Default incremental compilation with disabled precise java tracking and enabled K2") +class IncrementalK2JavaChangeDisablePreciseIT : IncrementalJavaChangeDisablePreciseIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() } @JvmGradlePluginTests diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsIrBeIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsIrBeIncrementalCompilationIT.kt index 81726ef259b..b1b46dce772 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsIrBeIncrementalCompilationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsIrBeIncrementalCompilationIT.kt @@ -18,13 +18,18 @@ import kotlin.test.assertFalse import kotlin.test.assertNotEquals import kotlin.test.assertTrue -@DisplayName("Incremental compilation tests for Kotlin JS IR backend with 2.0") +@DisplayName("Incremental compilation tests for Kotlin JS IR backend with K1") @JsGradlePluginTests -class Kotlin2FirJsIrBeIncrementalCompilationIT : Kotlin2JsIrBeIncrementalCompilationIT() { +class Kotlin2JsK1IrBeIncrementalCompilationIT : Kotlin2JsIrBeIncrementalCompilationIT() { override val defaultBuildOptions: BuildOptions - get() = super.defaultBuildOptions.copy( - languageVersion = "2.0" - ) + get() = super.defaultBuildOptions.copyEnsuringK1() +} + +@DisplayName("Incremental compilation tests for Kotlin JS IR backend with K2") +@JsGradlePluginTests +class Kotlin2JsK2IrBeIncrementalCompilationIT : Kotlin2JsIrBeIncrementalCompilationIT() { + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK2() @Disabled("Not found way to fail BE compilation with successful FE 2.0 compilation") override fun testRebuildAfterError(gradleVersion: GradleVersion) { @@ -34,7 +39,7 @@ class Kotlin2FirJsIrBeIncrementalCompilationIT : Kotlin2JsIrBeIncrementalCompila @DisplayName("Incremental compilation tests for Kotlin JS IR backend") @JsGradlePluginTests -open class Kotlin2JsIrBeIncrementalCompilationIT : KGPBaseTest() { +abstract class Kotlin2JsIrBeIncrementalCompilationIT : KGPBaseTest() { override val defaultBuildOptions = BuildOptions( jsOptions = BuildOptions.JsOptions( incrementalJsKlib = true, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsIncrementalGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsIncrementalGradlePluginIT.kt index 4c72596fe7a..8e076a8fc74 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsIncrementalGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsIncrementalGradlePluginIT.kt @@ -13,17 +13,14 @@ import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName -@JsGradlePluginTests -open class KotlinJsIr10IncrementalGradlePluginIT : AbstractKotlinJsIncrementalGradlePluginIT( - irBackend = true -) - -@JsGradlePluginTests -class KotlinJsFirIncrementalGradlePluginIT : KotlinJsIr10IncrementalGradlePluginIT() { +class KotlinJsIrK1IncrementalGradlePluginIT : AbstractKotlinJsIncrementalGradlePluginIT(irBackend = true) { override val defaultBuildOptions: BuildOptions - get() = super.defaultBuildOptions.copy( - languageVersion = "2.0" - ) + get() = super.defaultBuildOptions.copyEnsuringK1() +} + +class KotlinJsIrK2IncrementalGradlePluginIT : AbstractKotlinJsIncrementalGradlePluginIT(irBackend = true) { + override val defaultBuildOptions: BuildOptions + get() = super.defaultBuildOptions.copyEnsuringK2() } @JsGradlePluginTests diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt index 5bec07ecc98..4f04abefe68 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJsLibraryGradlePluginIT.kt @@ -74,12 +74,12 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() { @DisplayName("Kotlin/JS K1 IR library") @JsGradlePluginTests class KotlinK1JsIrLibraryGradlePluginIT : KotlinJsIrLibraryGradlePluginITBase() { - override val defaultBuildOptions = super.defaultBuildOptions.copy(languageVersion = null) + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() } @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_0) @DisplayName("Kotlin/JS K2 IR library") @JsGradlePluginTests class KotlinK2JsIrLibraryGradlePluginIT : KotlinJsIrLibraryGradlePluginITBase() { - override val defaultBuildOptions = super.defaultBuildOptions.copy(languageVersion = "2.0") + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ScriptingIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ScriptingIT.kt index de051a88694..da141c28e5e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ScriptingIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ScriptingIT.kt @@ -21,7 +21,7 @@ import kotlin.io.path.relativeTo @DisplayName("Scripting plugin") @OtherGradlePluginTests @GradleTestVersions(maxVersion = TestVersions.Gradle.G_7_3) // workaround for a Gradle synchronization bug: https://github.com/gradle/gradle/issues/23450 -class ScriptingIT : KGPBaseTest() { +abstract class ScriptingIT : KGPBaseTest() { @DisplayName("basic script is working") @GradleTest @@ -110,4 +110,14 @@ class ScriptingIT : KGPBaseTest() { } } +} + +@DisplayName("K1 Scripting plugin") +class ScriptingK1IT : ScriptingIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK1() +} + +@DisplayName("K2 Scripting plugin") +class ScriptingK2IT : ScriptingIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2() } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt index d1a9fba9872..10c6b07c351 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt @@ -11,6 +11,7 @@ import org.gradle.internal.logging.LoggingConfigurationBuildOptions.StacktraceOp import org.gradle.util.GradleVersion import org.jetbrains.kotlin.cli.common.CompilerSystemProperties.COMPILE_INCREMENTAL_WITH_ARTIFACT_TRANSFORM import org.jetbrains.kotlin.gradle.BaseGradleIT +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy import org.jetbrains.kotlin.gradle.report.BuildReportType @@ -51,6 +52,15 @@ data class BuildOptions( val compilerExecutionStrategy: KotlinCompilerExecutionStrategy? = null, val runViaBuildToolsApi: Boolean? = null, ) { + val isK2ByDefault + get() = KotlinVersion.DEFAULT >= KotlinVersion.KOTLIN_2_0 + + fun copyEnsuringK1(): BuildOptions = + copy(languageVersion = if (isK2ByDefault) "1.9" else null) + + fun copyEnsuringK2(): BuildOptions = + copy(languageVersion = if (isK2ByDefault) null else "2.0") + val safeAndroidVersion: String get() = androidVersion ?: error("AGP version is expected to be set")