From 6f584bcbe706dced9bdb1a8bef32bc4b619a2d21 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Thu, 4 May 2023 17:18:48 +0100 Subject: [PATCH] [mpp] Fix reporting of pre-HMPP dependencies from intermediate source sets It's an unfortunate clash between introduction of KotlinPluginLifecycle and changes in 'deprecationDiagnostics.kt'. It used 'afterEvaluate', but with KotlinPluginLifecycle later stages are effectively invoked in multiple nested afterEvaluate, making them invisible for single afterEvaluate. Specifically in this case, configuration of metadata compilations for intermediate source sets is executed in 'FinaliseCompilations' stage, which is simply not executed by the time checker runs in its single afterEvaluate. The fix is trivial -- wrap diagnostic checks runs into launchInStage ^KT-58470 Fixed --- .../mpp/PreHmppDependenciesDeprecationIT.kt | 6 ++++ .../build.gradle.kts | 34 +++++++++++++++++++ .../mpp/internal/deprecationDiagnostics.kt | 6 ++-- .../runProjectConfigurationHealthCheck.kt | 4 ++- 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/reportFromIntermediateSourceSet/build.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt index c7c2be4457a..06fc157b094 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt @@ -17,6 +17,12 @@ class PreHmppDependenciesDeprecationIT : KGPBaseTest() { checkDiagnostics(gradleVersion, "simpleReport", tempDir, expectReportForDependency = "preHmppLibrary") } + @GradleTest + fun testReportFromIntermediateSourceSet(gradleVersion: GradleVersion, @TempDir tempDir: Path) { + publishLibrary("preHmppLibrary", gradleVersion, tempDir) + checkDiagnostics(gradleVersion, "reportFromIntermediateSourceSet", tempDir, expectReportForDependency = "preHmppLibrary") + } + @GradleTest fun testTransitiveDependencyUpgradesVersion(gradleVersion: GradleVersion, @TempDir tempDir: Path) { // 0.1 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/reportFromIntermediateSourceSet/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/reportFromIntermediateSourceSet/build.gradle.kts new file mode 100644 index 00000000000..327105aef04 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/reportFromIntermediateSourceSet/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + kotlin("multiplatform") +} + +repositories { + mavenCentral() + mavenLocal() + maven("") +} + +kotlin { + jvm() + linuxX64() + js() + + sourceSets { + val commonMain by getting + + val intermediate by creating { + dependsOn(commonMain) + dependencies { + implementation("org.jetbrains.kotlin.tests:preHmppLibrary:0.1") + } + } + + val jvmMain by getting { + dependsOn(intermediate) + } + + val linuxX64Main by getting { + dependsOn(intermediate) + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/internal/deprecationDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/internal/deprecationDiagnostics.kt index 63b89ca9d23..c8a7899b078 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/internal/deprecationDiagnostics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/internal/deprecationDiagnostics.kt @@ -56,9 +56,9 @@ private fun reportTargetsWithNonUniqueConsumableConfigurations(project: Project) } SingleWarningPerBuild.show( - project,"w: The following targets are not distinguishable:\n$nonUniqueTargetsString" + - "\nUse distinguish attribute. " + - "See https://kotlinlang.org/docs/multiplatform-set-up-targets.html#distinguish-several-targets-for-one-platform for more details." + project, "w: The following targets are not distinguishable:\n$nonUniqueTargetsString" + + "\nUse distinguish attribute. " + + "See https://kotlinlang.org/docs/multiplatform-set-up-targets.html#distinguish-several-targets-for-one-platform for more details." ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt index 9d0453b17fb..18794ebf718 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt @@ -9,8 +9,10 @@ import org.gradle.api.Project import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.provider.Provider import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters +import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.internal.configurationTimePropertiesAccessor import org.jetbrains.kotlin.gradle.plugin.internal.usedAtConfigurationTime +import org.jetbrains.kotlin.gradle.plugin.launchInStage import org.jetbrains.kotlin.gradle.plugin.whenEvaluated /** @@ -97,7 +99,7 @@ private fun Project.inLenientMode() = * @see runProjectConfigurationHealthCheck */ internal inline fun Project.runProjectConfigurationHealthCheckWhenEvaluated(crossinline check: Project.() -> Unit) { - whenEvaluated { + launchInStage(KotlinPluginLifecycle.Stage.ReadyForExecution) { runProjectConfigurationHealthCheck(check) } }