From bb7e738b9e20a3431a7569224113b96282bf59f8 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Mon, 17 Jul 2023 23:21:15 +0200 Subject: [PATCH] [Gradle] Remove TargetsNeedDisambiguation diagnostic It is overlapping with KotlinTargetAlreadyDeclared which is stricter and recommends users to migrate away from multiple target set up at all. ^KT-59316 Verification Pending --- .../diagnostics/KotlinGradleProjectChecker.kt | 1 - .../diagnostics/KotlinToolingDiagnostics.kt | 11 --- ...mbiguousConsumableConfigurationsChecker.kt | 44 --------- .../MppDiagnosticsFunctionalTest.kt | 34 +------ .../targetsDisambiguation.txt | 96 ------------------- 5 files changed, 3 insertions(+), 183 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/TargetsWithAmbiguousConsumableConfigurationsChecker.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/targetsDisambiguation.txt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt index f52b9d380b1..2cd6a489092 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinGradleProjectChecker.kt @@ -102,7 +102,6 @@ internal interface KotlinGradleProjectChecker { MissingNativeStdlibChecker, UnusedSourceSetsChecker, AndroidSourceSetLayoutV1SourceSetsNotFoundChecker, - TargetsWithAmbiguousConsumableConfigurationsChecker, AndroidPluginWithoutAndroidTargetChecker, NoKotlinTargetsDeclaredChecker, DisabledCinteropCommonizationInHmppProjectChecker, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt index bee3bf4d31b..c8f854b67eb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt @@ -194,17 +194,6 @@ object KotlinToolingDiagnostics { ) } - object TargetsNeedDisambiguation : ToolingDiagnosticFactory(WARNING) { - operator fun invoke(targetGroupsRendered: String) = build( - """ - |The following targets are not distinguishable: - |$targetGroupsRendered - |Use an additional attribute to disambiguate them - |See https://kotlinlang.org/docs/multiplatform-set-up-targets.html#distinguish-several-targets-for-one-platform for more details - """.trimMargin() - ) - } - object DeprecatedPropertyWithReplacement : ToolingDiagnosticFactory(WARNING) { operator fun invoke(deprecatedPropertyName: String, replacement: String) = build( "Project property '$deprecatedPropertyName' is deprecated. Please use '$replacement' instead." diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/TargetsWithAmbiguousConsumableConfigurationsChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/TargetsWithAmbiguousConsumableConfigurationsChecker.kt deleted file mode 100644 index 76a7655b7f1..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/TargetsWithAmbiguousConsumableConfigurationsChecker.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers - -import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle -import org.jetbrains.kotlin.gradle.plugin.await -import org.jetbrains.kotlin.gradle.plugin.diagnostics.* -import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker -import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectCheckerContext -import org.jetbrains.kotlin.gradle.utils.toMap - -/** - * Report scenario when there are two targets of the same platform without distinguishing attribute - */ -internal object TargetsWithAmbiguousConsumableConfigurationsChecker : KotlinGradleProjectChecker { - override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) { - // Need all configurations to be created/set up - KotlinPluginLifecycle.Stage.ReadyForExecution.await() - - val allTargets = multiplatformExtension?.targets ?: return - - val nonDistinguishableTargets = allTargets - .mapNotNull { target -> - val configuration = project.configurations.findByName(target.apiElementsConfigurationName) ?: return@mapNotNull null - target.name to configuration - } - .groupBy { (_, consumableConfiguration) -> consumableConfiguration.attributes.toMap() } - .values - .filter { targetGroup -> targetGroup.size > 1 } - .map { targetGroup -> targetGroup.map { (targetName, _) -> targetName } } - - if (nonDistinguishableTargets.isEmpty()) return - - val nonUniqueTargetsString = nonDistinguishableTargets.joinToString(separator = "\n") { targets -> - val targetsListString = targets.joinToString { targetName -> "'$targetName'" } - " * $targetsListString" - } - - collector.reportOncePerGradleProject(project, KotlinToolingDiagnostics.TargetsNeedDisambiguation(nonUniqueTargetsString)) - } -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt index 8c4fa432216..5ef141713f3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt @@ -5,9 +5,10 @@ package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests -import org.gradle.api.attributes.Attribute import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset -import org.jetbrains.kotlin.gradle.util.* +import org.jetbrains.kotlin.gradle.util.androidLibrary +import org.jetbrains.kotlin.gradle.util.checkDiagnosticsWithMppProject +import org.jetbrains.kotlin.gradle.util.kotlin import org.junit.Test class MppDiagnosticsFunctionalTest { @@ -99,35 +100,6 @@ class MppDiagnosticsFunctionalTest { } } - @Test - fun targetsDisambiguation() { - checkDiagnosticsWithMppProject("targetsDisambiguation") { - kotlin { - val distinguishAttribute = Attribute.of(String::class.java) - - // Simple case: no disambiguation -> warning reported - linuxArm64("linuxArm_A") { } - linuxArm64("linuxArm_B") { } - - // Some targets are disambiguated and some are not -> warning reported, only on targets without attribute - jvm("jvm_A") { attributes { attribute(distinguishAttribute, "jvm1") } } - jvm("jvm_B") { attributes { attribute(distinguishAttribute, "jvm2") } } - jvm("jvm_C") - jvm("jvm_D") - - // Targets formally have attribute, but values are the same -> warning reported - js("js_A") { - browser() - attributes { attribute(distinguishAttribute, "js") } - } - js("js_B") { - browser() - attributes { attribute(distinguishAttribute, "js") } - } - } - } - } - @Test fun testNoTargetsDeclared() { checkDiagnosticsWithMppProject("noTargetsDeclared") { diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/targetsDisambiguation.txt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/targetsDisambiguation.txt deleted file mode 100644 index bc73fad7e7c..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/resources/expectedDiagnostics/targetsDisambiguation.txt +++ /dev/null @@ -1,96 +0,0 @@ -[KotlinTargetAlreadyDeclared | WARNING] Kotlin Target 'linuxArm64()' is already declared. -Declaring multiple Kotlin Targets of the same type is deprecated. - -i.e. - kotlin { - linuxArm64() - linuxArm64("linuxArm_B") /* <- second 'linuxArm64' target in the project is deprecated */ - } - -Please use different Gradle Projects or create Kotlin Compilations. -For example: - - kotlin { - linuxArm64() { - val linuxArm_B by compilations.creating - } - } ----- -[KotlinTargetAlreadyDeclared | WARNING] Kotlin Target 'jvm()' is already declared. -Declaring multiple Kotlin Targets of the same type is deprecated. - -i.e. - kotlin { - jvm() - jvm("jvm_B") /* <- second 'jvm' target in the project is deprecated */ - } - -Please use different Gradle Projects or create Kotlin Compilations. -For example: - - kotlin { - jvm() { - val jvm_B by compilations.creating - } - } ----- -[KotlinTargetAlreadyDeclared | WARNING] Kotlin Target 'jvm()' is already declared. -Declaring multiple Kotlin Targets of the same type is deprecated. - -i.e. - kotlin { - jvm() - jvm("jvm_C") /* <- second 'jvm' target in the project is deprecated */ - } - -Please use different Gradle Projects or create Kotlin Compilations. -For example: - - kotlin { - jvm() { - val jvm_C by compilations.creating - } - } ----- -[KotlinTargetAlreadyDeclared | WARNING] Kotlin Target 'jvm()' is already declared. -Declaring multiple Kotlin Targets of the same type is deprecated. - -i.e. - kotlin { - jvm() - jvm("jvm_D") /* <- second 'jvm' target in the project is deprecated */ - } - -Please use different Gradle Projects or create Kotlin Compilations. -For example: - - kotlin { - jvm() { - val jvm_D by compilations.creating - } - } ----- -[KotlinTargetAlreadyDeclared | WARNING] Kotlin Target 'js()' is already declared. -Declaring multiple Kotlin Targets of the same type is deprecated. - -i.e. - kotlin { - js() - js("js_B") /* <- second 'js' target in the project is deprecated */ - } - -Please use different Gradle Projects or create Kotlin Compilations. -For example: - - kotlin { - js() { - val js_B by compilations.creating - } - } ----- -[TargetsNeedDisambiguation | WARNING] The following targets are not distinguishable: - * 'js_A', 'js_B' - * 'jvm_C', 'jvm_D' - * 'linuxArm_A', 'linuxArm_B' -Use an additional attribute to disambiguate them -See https://kotlinlang.org/docs/multiplatform-set-up-targets.html#distinguish-several-targets-for-one-platform for more details \ No newline at end of file