From 4b48f15d0f9ea03327b99456821abf93a50e1965 Mon Sep 17 00:00:00 2001 From: Adam Semenenko <152864218+adam-enko@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:56:44 +0100 Subject: [PATCH] [Gradle] skip CheckKotlinGradlePluginConfigurationErrors if no errors - Add an `onlyIf {}` check so CheckKotlinGradlePluginConfigurationErrors won't run unless there are errors, which helps writing integration tests and preventing IJ warnings. - remove unnecessary sequence when fetching DiagnosticsForProject - update test assertions relating to CheckKotlinGradlePluginConfigurationErrors ^KT-61943 Fixed --- .../jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt | 9 +++++++++ .../build.gradle.kts | 12 ++++++++++++ .../settings.gradle.kts | 1 + .../expectedOutput-healthy.txt | 2 +- .../expectedOutput-root-with-continue.txt | 2 +- .../suppressGradlePluginErrors/expectedOutput.txt | 2 +- .../suppressGradlePluginWarnings/expectedOutput.txt | 2 +- .../CheckKotlinGradlePluginConfigurationErrors.kt | 9 +++++++-- 8 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/settings.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt index 859ac60fbd3..029fdffc6a6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt @@ -193,6 +193,15 @@ class MppDiagnosticsIt : KGPBaseTest() { } } + @GradleTest + fun testErrorDiagnosticUpToDateIfNoErrors(gradleVersion: GradleVersion) { + project("errorDiagnosticUpToDateIfNoErrors", gradleVersion) { + build("assemble") { + assertTasksSkipped(":checkKotlinGradlePluginConfigurationErrors") + } + } + } + private fun TestProject.expectedOutputFile(suffix: String? = null): File { val suffixIfAny = if (suffix != null) "-$suffix" else "" return projectPath.resolve("expectedOutput$suffixIfAny.txt").toFile() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/build.gradle.kts new file mode 100644 index 00000000000..7842addd0f2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + jvm() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/settings.gradle.kts new file mode 100644 index 00000000000..11a1c9bfc64 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorDiagnosticUpToDateIfNoErrors/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "diagnostics-rendering-smoke" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-healthy.txt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-healthy.txt index aa46f7d11dc..f5f9001448d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-healthy.txt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-healthy.txt @@ -12,4 +12,4 @@ e: [CommonMainOrTestWithDependsOnDiagnostic | ERROR] commonMain can't declare de > Configure project :healthyProject -> Task :healthyProject:checkKotlinGradlePluginConfigurationErrors +> Task :healthyProject:checkKotlinGradlePluginConfigurationErrors SKIPPED diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-root-with-continue.txt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-root-with-continue.txt index 28c12eac9bf..babfb523f55 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-root-with-continue.txt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/errorsFailOnlyRelevantProjects/expectedOutput-root-with-continue.txt @@ -22,4 +22,4 @@ e: [CommonMainOrTestWithDependsOnDiagnostic | ERROR] commonMain can't declare de #diagnostic-end -> Task :healthyProject:checkKotlinGradlePluginConfigurationErrors +> Task :healthyProject:checkKotlinGradlePluginConfigurationErrors SKIPPED diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginErrors/expectedOutput.txt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginErrors/expectedOutput.txt index 09887a74d67..9c8c6dd57d5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginErrors/expectedOutput.txt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginErrors/expectedOutput.txt @@ -8,4 +8,4 @@ Stability and future compatibility of the build is not guaranteed. #diagnostic-end -> Task :checkKotlinGradlePluginConfigurationErrors +> Task :checkKotlinGradlePluginConfigurationErrors SKIPPED diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginWarnings/expectedOutput.txt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginWarnings/expectedOutput.txt index 9879ac9928b..7722874b4ea 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginWarnings/expectedOutput.txt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/suppressGradlePluginWarnings/expectedOutput.txt @@ -1,3 +1,3 @@ > Configure project : -> Task :checkKotlinGradlePluginConfigurationErrors +> Task :checkKotlinGradlePluginConfigurationErrors SKIPPED diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/CheckKotlinGradlePluginConfigurationErrors.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/CheckKotlinGradlePluginConfigurationErrors.kt index 3d9275c3547..e542356f2b1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/CheckKotlinGradlePluginConfigurationErrors.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/CheckKotlinGradlePluginConfigurationErrors.kt @@ -15,6 +15,7 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.work.DisableCachingByDefault import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.onlyIfCompat @DisableCachingByDefault( because = "This task renders reported diagnostics; caching this task will hide diagnostics and obscure issues in the build" @@ -51,14 +52,18 @@ internal fun Project.locateOrRegisterCheckKotlinGradlePluginErrorsTask(): TaskPr task.errorDiagnostics.set( provider { kotlinToolingDiagnosticsCollector - .getDiagnosticsForProject(this).asSequence() + .getDiagnosticsForProject(this) .filter { it.severity == ToolingDiagnostic.Severity.ERROR } - .toList() } ) task.renderingOptions.set(ToolingDiagnosticRenderingOptions.forProject(this)) task.description = DESCRIPTION task.group = LifecycleBasePlugin.VERIFICATION_GROUP + + task.onlyIfCompat("errorDiagnostics are present") { + require(it is CheckKotlinGradlePluginConfigurationErrors) + !it.errorDiagnostics.orNull.isNullOrEmpty() + } } taskProvider.addDependsOnFromTasksThatShouldFailWhenErrorsReported(tasks)