From 63b03d29dc75fecae7ac127318070d51f10a3304 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Mon, 10 Feb 2020 12:54:28 +0700 Subject: [PATCH] [Commonizer] Prevent from running commonizer from Gradle more then once --- .../native/KotlinNativeTargetPreset.kt | 5 ++- .../gradle/utils/SingleWarningPerBuild.kt | 20 ---------- .../kotlin/gradle/utils/singleAction.kt | 38 +++++++++++++++++++ 3 files changed, 42 insertions(+), 21 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/SingleWarningPerBuild.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index 66755a9ec7e..1505c80adc7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.jetbrains.kotlin.gradle.targets.native.internal.setUpKotlinNativePlatformDependencies import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget @@ -69,7 +70,9 @@ abstract class AbstractKotlinNativeTargetPreset( createTargetConfigurator().configureTarget(result) project.gradle.taskGraph.whenReady { - project.rootProject.setUpKotlinNativePlatformDependencies() + SingleActionPerProject.run(project, "setUpKotlinNativePlatformDependencies") { + project.setUpKotlinNativePlatformDependencies() + } } if (!konanTarget.enabledOnCurrentHost) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/SingleWarningPerBuild.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/SingleWarningPerBuild.kt deleted file mode 100644 index 1dd9b51728f..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/SingleWarningPerBuild.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2010-2018 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.utils - -import org.gradle.api.Project -import java.util.* - -internal object SingleWarningPerBuild { - private val rootModuleReceivedWarning = WeakHashMap>() - - fun show(project: Project, warningText: String) { - val receivedWarnings = rootModuleReceivedWarning.computeIfAbsent(project.rootProject) { mutableSetOf() } - if (receivedWarnings.add(warningText)) { - project.logger.warn(warningText) - } - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt new file mode 100644 index 00000000000..c645874ae08 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/singleAction.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2020 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.utils + +import org.gradle.api.Project +import java.util.WeakHashMap + +internal abstract class SingleAction { + private val performedActions = WeakHashMap>() + + protected abstract fun selectKey(project: Project): Project + + fun run(project: Project, actionId: String, action: () -> Unit) { + val performedActions = performedActions.computeIfAbsent(selectKey(project)) { mutableSetOf() } + if (performedActions.add(actionId)) { + action() + } + } +} + +internal object SingleActionPerBuild : SingleAction() { + override fun selectKey(project: Project): Project = project.rootProject +} + +internal object SingleActionPerProject : SingleAction() { + override fun selectKey(project: Project) = project +} + +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) + } +}