From 26c1b931c8827e30a98c8a766057c018761a5a09 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Fri, 6 Jan 2023 10:49:20 +0100 Subject: [PATCH] [Gradle] Create deprecated configurations as some projects are still... ...dependending on them. --- .../plugin/sources/KotlinSourceSetFactory.kt | 40 +++++++++++++------ .../gradle/utils/ObjectCollectionExt.kt | 15 +++++++ 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt index 41d82f444d6..40c1aca0ee5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled +import org.jetbrains.kotlin.gradle.utils.maybeRegister import java.io.File internal abstract class KotlinSourceSetFactory internal constructor( @@ -74,20 +75,35 @@ internal class DefaultKotlinSourceSetFactory( super.setUpSourceSetDefaults(sourceSet) sourceSet.resources.srcDir(defaultSourceFolder(project, sourceSet.name, "resources")) - project.configurations.maybeCreate(sourceSet.intransitiveMetadataConfigurationName).apply { - attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) - attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_API)) - attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.categoryByName(Category.LIBRARY)) - isVisible = false - isCanBeConsumed = false - isCanBeResolved = true + val dependencyConfigurationWithMetadata = with(sourceSet) { + @Suppress("DEPRECATION") + listOf( + apiConfigurationName to apiMetadataConfigurationName, + implementationConfigurationName to implementationMetadataConfigurationName, + compileOnlyConfigurationName to compileOnlyMetadataConfigurationName, + null to intransitiveMetadataConfigurationName + ) + } - if (project.isKotlinGranularMetadataEnabled) { - attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) - } + dependencyConfigurationWithMetadata.forEach { (configurationName, metadataName) -> + project.configurations.maybeRegister(metadataName) { + attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) + attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_API)) + attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.categoryByName(Category.LIBRARY)) + isVisible = false + isCanBeConsumed = false - project.afterEvaluate { - setJsCompilerIfNecessary(sourceSet, this@apply) + if (configurationName != null) { + extendsFrom(project.configurations.maybeCreate(configurationName)) + } + + if (project.isKotlinGranularMetadataEnabled) { + attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) + } + + project.afterEvaluate { + setJsCompilerIfNecessary(sourceSet, this) + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt index 17cdf111ea9..6051f987382 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.DomainObjectCollection import org.gradle.api.NamedDomainObjectContainer +import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Task import org.gradle.api.tasks.TaskCollection import org.gradle.api.tasks.TaskProvider @@ -29,3 +30,17 @@ internal fun NamedDomainObjectContainer.getOrCreate( if (invokeWhenCreated != null) invokeWhenCreated(value) } } + +internal fun NamedDomainObjectContainer.maybeRegister( + name: String, + configure: (T.() -> Unit)? = null +): NamedDomainObjectProvider { + val entity = if (name in names) { + named(name) + } else { + register(name) + } + + if (configure != null) entity.configure(configure) + return entity +} \ No newline at end of file