From db5df5c5ec12e9c24544a751a5b310f1148f14e1 Mon Sep 17 00:00:00 2001 From: Alexander Likhachev Date: Tue, 13 Dec 2022 04:37:17 +0100 Subject: [PATCH] [Gradle] Add Gradle integration tests with precise compilation outputs backup #KT-49785 In Progress --- .../gradle/CompilerPluginsIncrementalIT.kt | 7 ++++++- .../IncrementalCompilationMultiProjectIT.kt | 16 ++++++++++++++-- .../kotlin/gradle/IncrementalJavaChangeIT.kt | 5 +++++ .../jetbrains/kotlin/gradle/KaptIncrementalIT.kt | 5 +++++ .../gradle/KaptIncrementalWithAggregatingApt.kt | 7 ++++++- .../gradle/KaptIncrementalWithIsolatingApt.kt | 7 ++++++- .../gradle/android/Kapt3AndroidIncrementalIT.kt | 7 ++++++- .../gradle/android/KotlinAndroidIncrementalIT.kt | 9 +++++---- .../kotlin/gradle/testbase/BuildOptions.kt | 5 +++++ 9 files changed, 58 insertions(+), 10 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 2a82571c9d0..fd57320c936 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 -class CompilerPluginsIncrementalIT : KGPBaseTest() { +open class CompilerPluginsIncrementalIT : KGPBaseTest() { override val defaultBuildOptions: BuildOptions get() = super.defaultBuildOptions.copy( incremental = true @@ -68,3 +68,8 @@ class CompilerPluginsIncrementalIT : KGPBaseTest() { private val String.prefix get() = "compilerPlugins/$this" } + +@DisplayName("Compiler plugin incremental compilation with precise compilation outputs backup") +class CompilerPluginsIncrementalWithPreciseBackupIT : CompilerPluginsIncrementalIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} \ 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 a9b0c0bcc68..5d03918840f 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 @@ -12,7 +12,7 @@ import java.nio.file.Path import kotlin.io.path.* @JsGradlePluginTests -class IncrementalCompilationJsMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { +open class IncrementalCompilationJsMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { override val defaultProjectName: String = "incrementalMultiproject" override fun defaultProject( @@ -136,6 +136,10 @@ class IncrementalCompilationJsMultiProjectIT : BaseIncrementalCompilationMultiPr } } +class IncrementalCompilationJsMultiProjectWithPreciseBackupIT : IncrementalCompilationJsMultiProjectIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} + @JvmGradlePluginTests open class IncrementalCompilationJvmMultiProjectIT : BaseIncrementalCompilationMultiProjectIT() { override val additionalLibDependencies: String = @@ -275,11 +279,15 @@ open class IncrementalCompilationJvmMultiProjectIT : BaseIncrementalCompilationM } } +class IncrementalCompilationJvmMultiProjectWithPreciseBackupIT : IncrementalCompilationJvmMultiProjectIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} + class IncrementalCompilationFirJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(useFir = true) } -class IncrementalCompilationOldICJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { +open class IncrementalCompilationOldICJvmMultiProjectIT : IncrementalCompilationJvmMultiProjectIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy(useGradleClasspathSnapshot = false) @@ -412,6 +420,10 @@ class IncrementalCompilationOldICJvmMultiProjectIT : IncrementalCompilationJvmMu } } +class IncrementalCompilationOldICJvmMultiProjectWithPreciseBackupIT : IncrementalCompilationOldICJvmMultiProjectIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} + abstract class BaseIncrementalCompilationMultiProjectIT : IncrementalCompilationBaseIT() { protected abstract val compileKotlinTaskName: String 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 af102a88ba3..2d592fd3417 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 @@ -91,6 +91,11 @@ open class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBas } } +@DisplayName("Default incremental compilation with precise compilation outputs backup") +open class IncrementalJavaChangePreciseCompilationBackupIT : IncrementalJavaChangeDefaultIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} + @DisplayName("Incremental compilation via classpath snapshots with default precise java tracking") class IncrementalJavaChangeOldICIT : IncrementalJavaChangeDefaultIT() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt index d98c7118df8..5e297bc569d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt @@ -388,3 +388,8 @@ open class KaptIncrementalIT : KGPBaseTest() { val TestProject.kaptGeneratedToPath get() = projectPath.resolve("build/generated/source/kapt") } + +@DisplayName("Kapt incremental compilation with precise compilation outputs backup") +class KaptIncrementalWithPreciseBackupIT : KaptIncrementalIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt index 3857fa02f81..9e00e2dde62 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt @@ -21,7 +21,7 @@ import kotlin.test.assertEquals import kotlin.test.assertTrue @DisplayName("Kapt incremental tests with aggregating apt") -class KaptIncrementalWithAggregatingApt : KaptIncrementalIT() { +open class KaptIncrementalWithAggregatingApt : KaptIncrementalIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy( incremental = true, @@ -389,3 +389,8 @@ class KaptIncrementalWithAggregatingApt : KaptIncrementalIT() { } } } + +@DisplayName("Kapt incremental tests with aggregating apt with precise compilation outputs backup") +class KaptIncrementalWithAggregatingAptAndPreciseBackup : KaptIncrementalWithAggregatingApt() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt index dcbc6b792f4..309e1550e28 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt @@ -24,7 +24,7 @@ import kotlin.io.path.* import kotlin.test.assertEquals @DisplayName("Kapt incremental tests with isolating apt") -class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() { +open class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() { override val defaultBuildOptions = super.defaultBuildOptions.copy( incremental = true, @@ -429,6 +429,11 @@ class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() { } } +@DisplayName("Kapt incremental tests with isolating apt with precise compilation outputs backup") +class KaptIncrementalWithIsolatingAptAndPreciseBackup : KaptIncrementalWithIsolatingApt() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) +} + private const val patternApt = "Processing java sources with annotation processors:" fun getProcessedSources(output: String): Set { return output.lines().filter { it.contains(patternApt) }.flatMapTo(HashSet()) { logging -> diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIncrementalIT.kt index cfe19c15b8c..bb22a7b6a5e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIncrementalIT.kt @@ -18,7 +18,7 @@ import kotlin.io.path.writeText @DisplayName("android with kapt3 incremental build tests") @AndroidGradlePluginTests -class Kapt3AndroidIncrementalIT : Kapt3BaseIT() { +open class Kapt3AndroidIncrementalIT : Kapt3BaseIT() { @DisplayName("stubs generation is incremental on changes in android variant java sources") @GradleAndroidTest fun generateStubsTaskShouldRunIncrementallyOnChangesInAndroidVariantJavaSources( @@ -202,4 +202,9 @@ class Kapt3AndroidIncrementalIT : Kapt3BaseIT() { modifyAndCheck(libJvmProject.kotlinSourcesDir().resolve("libJvmUtil.kt"), "useLibJvmUtil.kt") } } +} + +@DisplayName("android with kapt3 incremental build tests with precise compilation outputs backup") +class Kapt3AndroidIncrementalWithPreciseBackupIT : Kapt3AndroidIncrementalIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt index a20b4ecc86d..12dcb6cc485 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/KotlinAndroidIncrementalIT.kt @@ -8,16 +8,13 @@ package org.jetbrains.kotlin.gradle.android import org.gradle.api.logging.LogLevel import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* -import org.jetbrains.kotlin.gradle.util.getFileByName -import org.jetbrains.kotlin.gradle.util.getFilesByNames -import org.jetbrains.kotlin.gradle.util.modify import org.junit.jupiter.api.DisplayName import kotlin.io.path.appendText import kotlin.io.path.writeText @DisplayName("kotlin-android incremental compilation tests") @AndroidGradlePluginTests -class KotlinAndroidIncrementalIT : KGPBaseTest() { +open class KotlinAndroidIncrementalIT : KGPBaseTest() { @DisplayName("incremental compilation works with single-module android projects") @GradleAndroidTest fun testIncrementalCompilation( @@ -180,4 +177,8 @@ class KotlinAndroidIncrementalIT : KGPBaseTest() { } } } +} + +class KotlinAndroidIncrementalWithPreciseBackupIT : KotlinAndroidIncrementalIT() { + override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = true) } \ 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 9de34f9597e..3c422faa174 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 @@ -38,6 +38,7 @@ data class BuildOptions( val usePreciseJavaTracking: Boolean? = null, val freeArgs: List = emptyList(), val statisticsForceValidation: Boolean = true, + val usePreciseOutputsBackup: Boolean? = null, ) { data class KaptOptions( val verbose: Boolean = false, @@ -144,6 +145,10 @@ data class BuildOptions( arguments.add("-Pkotlin_performance_profile_force_validation=true") } + if (usePreciseOutputsBackup != null) { + arguments.add("-Pkotlin.compiler.preciseCompilationResultsBackup=$usePreciseOutputsBackup") + } + arguments.addAll(freeArgs) return arguments.toList()