From af872b56928fa6a1b6abba741e4bbce2e30a3f0c Mon Sep 17 00:00:00 2001 From: Dmitrii Krasnov Date: Tue, 6 Feb 2024 18:45:20 +0100 Subject: [PATCH] [Gradle] Made kotlin native configuration init only once. `maybeCreateResolvable` with `also` each time configures configuration. But we cannot add new dependencies after the configuration is resolved. Thus, it is more correct to add init block for a case when it is a newly created configuration. ^KTIJ-28742 Fixed --- .../KotlinNativeBundleArtifactFormat.kt | 8 ++++---- .../kotlin/gradle/utils/configurations.kt | 16 +++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleArtifactFormat.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleArtifactFormat.kt index 50a815c6d6f..05b1cd2e4e0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleArtifactFormat.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleArtifactFormat.kt @@ -60,12 +60,12 @@ internal object KotlinNativeBundleArtifactFormat { internal fun addKotlinNativeBundleConfiguration(project: Project) { project.configurations - .maybeCreateResolvable(KOTLIN_NATIVE_BUNDLE_CONFIGURATION_NAME).also { configuration -> - configuration.defaultDependencies { + .maybeCreateResolvable(KOTLIN_NATIVE_BUNDLE_CONFIGURATION_NAME) { + defaultDependencies { it.add(project.dependencies.create(NativeCompilerDownloader.getCompilerDependencyNotation(project))) } - if (!configuration.attributes.contains(attribute)) { - configuration.attributes.setAttribute(attribute, KotlinNativeBundleArtifactsTypes.DIRECTORY) + if (!attributes.contains(attribute)) { + attributes.setAttribute(attribute, KotlinNativeBundleArtifactsTypes.DIRECTORY) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurations.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurations.kt index c43b4bb1542..b8967772fde 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurations.kt @@ -20,7 +20,10 @@ const val RUNTIME = "runtime" internal const val INTRANSITIVE = "intransitive" private val gradleVersionWithNewApi = GradleVersion.version("8.4") -internal fun ConfigurationContainer.createResolvable(name: String): Configuration = create(name).apply { +internal fun ConfigurationContainer.createResolvable( + name: String, + configurationOnCreate: Configuration.() -> Unit = {}, +): Configuration = create(name, configurationOnCreate).apply { isCanBeConsumed = false } @@ -42,8 +45,11 @@ internal fun ConfigurationContainer.findResolvable(name: String): Configuration? } } -internal fun ConfigurationContainer.maybeCreateResolvable(name: String): Configuration = - findResolvable(name) ?: createResolvable(name) +internal fun ConfigurationContainer.maybeCreateResolvable( + name: String, + configurationOnCreate: Configuration.() -> Unit = {}, +): Configuration = + findResolvable(name) ?: createResolvable(name, configurationOnCreate) internal fun ConfigurationContainer.detachedResolvable(vararg dependencies: Dependency) = detachedConfiguration(*dependencies).apply { @@ -67,7 +73,7 @@ internal fun ConfigurationContainer.maybeCreateConsumable(name: String): Configu internal fun ConfigurationContainer.createDependencyScope( name: String, - configuration: Configuration.() -> Unit = {} + configuration: Configuration.() -> Unit = {}, ): NamedDomainObjectProvider = if (GradleVersion.current() >= gradleVersionWithNewApi) { dependencyScope(name, configuration) @@ -91,5 +97,5 @@ internal fun ConfigurationContainer.findDependencyScope(name: String): Configura internal fun ConfigurationContainer.maybeCreateDependencyScope( name: String, - configurationOnCreate: Configuration.() -> Unit = {} + configurationOnCreate: Configuration.() -> Unit = {}, ): Configuration = findDependencyScope(name) ?: createDependencyScope(name, configurationOnCreate).get()