From 580c2a490d493984378e3fb1d65096ae036847f6 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 13 Nov 2023 14:44:00 +0100 Subject: [PATCH] [Gradle] Apply attribute disambiguation rules conditionally Not all Kotlin disambiguation rules are required for non-MPP projects. On the other hand, they lead to increased memory consumption in Gradle daemon especially notable on big multimodule projects. To address this memory increase, we start to apply these rules conditionally based on the applied plugin. ^KT-63005 Fixed --- .../gradle/plugin/KotlinPluginWrapper.kt | 16 +++++--- .../kotlin/gradle/utils/whenKaptEnabled.kt | 21 ---------- .../kotlin/gradle/utils/whenPluginEnabled.kt | 40 +++++++++++++++++++ 3 files changed, 51 insertions(+), 26 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenKaptEnabled.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenPluginEnabled.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 0595cb8c319..eaa8a37de87 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -199,12 +199,18 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin { ) = with(project.dependencies.attributesSchema) { KotlinPlatformType.setupAttributesMatchingStrategy(this) KotlinUsages.setupAttributesMatchingStrategy(this, isKotlinGranularMetadata) - KotlinJsCompilerAttribute.setupAttributesMatchingStrategy(project.dependencies.attributesSchema) - KotlinWasmTargetAttribute.setupAttributesMatchingStrategy(project.dependencies.attributesSchema) ProjectLocalConfigurations.setupAttributesMatchingStrategy(this) - CInteropKlibLibraryElements.setupAttributesMatchingStrategy(this) - CommonizerTargetAttribute.setupAttributesMatchingStrategy(this) - CInteropCommonizerArtifactTypeAttribute.setupTransform(project) + + project.whenJsOrMppEnabled { + KotlinJsCompilerAttribute.setupAttributesMatchingStrategy(project.dependencies.attributesSchema) + KotlinWasmTargetAttribute.setupAttributesMatchingStrategy(project.dependencies.attributesSchema) + } + + project.whenMppEnabled { + CInteropKlibLibraryElements.setupAttributesMatchingStrategy(this) + CommonizerTargetAttribute.setupAttributesMatchingStrategy(this) + CInteropCommonizerArtifactTypeAttribute.setupTransform(project) + } } open fun whenBuildEvaluated(project: Project) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenKaptEnabled.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenKaptEnabled.kt deleted file mode 100644 index 8d4f9daecb5..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenKaptEnabled.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2010-2022 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 - -internal fun Project.whenKaptEnabled(block: () -> Unit) { - var triggered = false - - fun trigger() { - if (triggered) return - triggered = true - block() - } - - pluginManager.withPlugin("kotlin-kapt") { trigger() } - pluginManager.withPlugin("org.jetbrains.kotlin.kapt") { trigger() } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenPluginEnabled.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenPluginEnabled.kt new file mode 100644 index 00000000000..26fdfdd0045 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/whenPluginEnabled.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2022 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 + +internal fun Project.whenKaptEnabled(action: () -> Unit) = whenPluginsEnabled( + setOf("org.jetbrains.kotlin.kapt", "kotlin-kapt"), + action, +) + +internal fun Project.whenMppEnabled(action: () -> Unit) = whenPluginsEnabled( + setOf("org.jetbrains.kotlin.multiplatform", "kotlin-multiplatform"), + action, +) + +internal fun Project.whenJsOrMppEnabled(action: () -> Unit) = whenPluginsEnabled( + setOf("org.jetbrains.kotlin.js", "org.jetbrains.kotlin.multiplatform", "kotlin-multiplatform"), + action, +) + +private fun Project.whenPluginsEnabled( + pluginIds: Set, + action: () -> Unit, +) { + var triggered = false + + fun trigger() { + if (triggered) return + triggered = true + action() + } + + for (pluginId in pluginIds) { + pluginManager.withPlugin(pluginId) { trigger() } + } +} \ No newline at end of file