From 97ecf43b7706eb98b789eebde5f3d0cf511f4519 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 8 Aug 2022 14:22:04 +0200 Subject: [PATCH] [Gradle][KT-53342] MultiplatformLayoutV1PromoteV2Checker: Show only single warning per build --- .../checker/MultiplatformLayoutV1PromoteV2Checker.kt | 6 ++++-- .../org/jetbrains/kotlin/gradle/utils/singleAction.kt | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV1PromoteV2Checker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV1PromoteV2Checker.kt index ecd23033d12..9e1dea78f77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV1PromoteV2Checker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV1PromoteV2Checker.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2 +import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild /** * Promotes MultiplatformAndroidSourceSetLayoutV2 when requirements are met @@ -22,8 +23,9 @@ internal object MultiplatformLayoutV1PromoteV2Checker : KotlinAndroidSourceSetLa if (target.project.kotlinPropertiesProvider.ignoreMppAndroidSourceSetLayoutVersion) return runCatching { if (MultiplatformLayoutV2AgpRequirementChecker.isAgpRequirementMet()) { - logger.warn( - """ + SingleWarningPerBuild.show( + target.project, logger, + """ w: ${layout.name} is deprecated. Use ${multiplatformAndroidSourceSetLayoutV2.name} instead. To enable ${multiplatformAndroidSourceSetLayoutV2.name}: put the following in your gradle.properties: ${PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION}=2 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt index b1268499b9a..77653e56325 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt @@ -6,7 +6,8 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.Project -import java.util.WeakHashMap +import org.gradle.api.logging.Logger +import java.util.* internal abstract class SingleAction { private val performedActions = WeakHashMap>() @@ -32,8 +33,10 @@ internal object SingleActionPerProject : SingleAction() { internal object SingleWarningPerBuild { private const val ACTION_ID_SHOW_WARNING = "show-warning:" - fun show(project: Project, warningText: String) = SingleActionPerBuild.run(project, ACTION_ID_SHOW_WARNING + warningText) { - project.logger.warn(warningText) + fun show(project: Project, warningText: String) = show(project, project.logger, warningText) + + fun show(project: Project, logger: Logger, warningText: String) = SingleActionPerBuild.run(project, ACTION_ID_SHOW_WARNING + warningText) { + logger.warn(warningText) } fun deprecation(project: Project, context: String, target: String, replacement: String?) {