diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt index e595f29b048..66c9a3ab695 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt @@ -196,10 +196,6 @@ interface HasKotlinDependencies { val implementationConfigurationName: String val compileOnlyConfigurationName: String val runtimeOnlyConfigurationName: String - - @Deprecated("Scheduled for removal with Kotlin 2.0") - val relatedConfigurationNames: List - get() = listOf(apiConfigurationName, implementationConfigurationName, compileOnlyConfigurationName, runtimeOnlyConfigurationName) } @Deprecated("Do not use in your build script") diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt index 965397eef8b..d0840da8f70 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilation.kt @@ -140,11 +140,6 @@ interface KotlinCompilation : Named, override fun getName(): String = compilationName - @Deprecated("Scheduled for removal with Kotlin 2.0") - @Suppress("DEPRECATION") - override val relatedConfigurationNames: List - get() = super.relatedConfigurationNames + compileDependencyConfigurationName - val disambiguatedName get() = target.disambiguationClassifier + name } @@ -154,11 +149,6 @@ interface KotlinCompilationToRunnableFiles : override val runtimeDependencyConfigurationName: String override var runtimeDependencyFiles: FileCollection - - @Suppress("DEPRECATION") - @Deprecated("Scheduled for removal with Kotlin 2.0") - override val relatedConfigurationNames: List - get() = super.relatedConfigurationNames + runtimeDependencyConfigurationName } @Deprecated("Scheduled for removal with Kotlin 2.0") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinCompilationToRunnableFiles.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinCompilationToRunnableFiles.kt index a200658b2da..9ff59ce598f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinCompilationToRunnableFiles.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinCompilationToRunnableFiles.kt @@ -21,9 +21,4 @@ internal constructor(compilation: KotlinCompilationImpl) : AbstractKotlinCompila final override var runtimeDependencyFiles: FileCollection = compilation.runtimeDependencyFiles ?: error("$compilation: Missing 'runtimeDependencyFiles'") - - @Deprecated("Scheduled for removal with Kotlin 2.0") - @Suppress("DEPRECATION") - override val relatedConfigurationNames: List - get() = compilation.relatedConfigurationNames } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index b660f465a08..817f90e5585 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -202,60 +202,6 @@ class KotlinMultiplatformPlugin : Plugin { } } -/** - * The attributes attached to the targets and compilations need to be propagated to the relevant Gradle configurations: - * 1. Output configurations of each target need the corresponding compilation's attributes (and, indirectly, the target's attributes) - * 2. Resolvable configurations of each compilation need the compilation's attributes - */ -internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) { - val project = target.project - project.whenEvaluated { - // To copy the attributes to the output configurations, find those output configurations and their producing compilations - // based on the target's components: - val outputConfigurationsWithCompilations = target.kotlinComponents.filterIsInstance().flatMap { kotlinVariant -> - kotlinVariant.usages.mapNotNull { usageContext -> - project.configurations.findByName(usageContext.dependencyConfigurationName)?.let { configuration -> - configuration to usageContext.compilation - } - } - }.toMutableList() - - val mainCompilation = target.compilations.findByName(KotlinCompilation.MAIN_COMPILATION_NAME) - - // Add usages of android library when its variants are grouped by flavor - outputConfigurationsWithCompilations += target.kotlinComponents - .filterIsInstance() - .flatMap { variant -> variant.usages } - .mapNotNull { usage -> - val configuration = project.configurations.findByName(usage.dependencyConfigurationName) ?: return@mapNotNull null - configuration to usage.compilation - } - - outputConfigurationsWithCompilations.forEach { (configuration, compilation) -> - copyAttributes(compilation.attributes, configuration.attributes) - } - - target.compilations.all { compilation -> - val compilationAttributes = compilation.attributes - - @Suppress("DEPRECATION") - compilation.relatedConfigurationNames - .mapNotNull { configurationName -> target.project.configurations.findByName(configurationName) } - .forEach { configuration -> copyAttributes(compilationAttributes, configuration.attributes) } - } - - // Copy to host-specific metadata elements configurations - if (target is KotlinNativeTarget) { - val hostSpecificMetadataElements = project.configurations.findByName(target.hostSpecificMetadataElementsConfigurationName) - if (hostSpecificMetadataElements != null) { - copyAttributes(from = target.attributes, to = hostSpecificMetadataElements.attributes) - } - } - } -} - - - internal fun Project.setupGeneralKotlinExtensionParameters() { project.launch { for (sourceSet in kotlinExtension.awaitSourceSets()) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/applyUserDefinedAttributes.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/applyUserDefinedAttributes.kt new file mode 100644 index 00000000000..9a1c8079957 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/applyUserDefinedAttributes.kt @@ -0,0 +1,85 @@ +/* + * Copyright 2010-2023 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.plugin.mpp + +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes +import org.jetbrains.kotlin.gradle.plugin.whenEvaluated + + +/** + * The attributes attached to the targets and compilations need to be propagated to the relevant Gradle configurations: + * 1. Output configurations of each target need the corresponding compilation's attributes (and, indirectly, the target's attributes) + * 2. Resolvable configurations of each compilation need the compilation's attributes + */ +internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) { + val project = target.project + project.whenEvaluated { + // To copy the attributes to the output configurations, find those output configurations and their producing compilations + // based on the target's components: + val outputConfigurationsWithCompilations = target.kotlinComponents.filterIsInstance().flatMap { kotlinVariant -> + kotlinVariant.usages.mapNotNull { usageContext -> + project.configurations.findByName(usageContext.dependencyConfigurationName)?.let { configuration -> + configuration to usageContext.compilation + } + } + }.toMutableList() + + // Add usages of android library when its variants are grouped by flavor + outputConfigurationsWithCompilations += target.kotlinComponents + .filterIsInstance() + .flatMap { variant -> variant.usages } + .mapNotNull { usage -> + val configuration = project.configurations.findByName(usage.dependencyConfigurationName) ?: return@mapNotNull null + configuration to usage.compilation + } + + outputConfigurationsWithCompilations.forEach { (configuration, compilation) -> + copyAttributes(compilation.attributes, configuration.attributes) + } + + target.compilations.all { compilation -> + val compilationAttributes = compilation.attributes + + compilation.allOwnedConfigurationsNames + .mapNotNull { configurationName -> target.project.configurations.findByName(configurationName) } + .forEach { configuration -> copyAttributes(compilationAttributes, configuration.attributes) } + } + + // Copy to host-specific metadata elements configurations + if (target is KotlinNativeTarget) { + val hostSpecificMetadataElements = project.configurations.findByName(target.hostSpecificMetadataElementsConfigurationName) + if (hostSpecificMetadataElements != null) { + copyAttributes(from = target.attributes, to = hostSpecificMetadataElements.attributes) + } + } + } +} + +private val KotlinCompilation<*>.allOwnedConfigurationsNames + get(): List { + val defaultConfigurations = listOfNotNull( + apiConfigurationName, + implementationConfigurationName, + compileOnlyConfigurationName, + runtimeOnlyConfigurationName, + compileDependencyConfigurationName, + runtimeDependencyConfigurationName, + ) + + val implementationSpecificConfigurations = when (this) { + is KotlinJvmAndroidCompilation -> listOfNotNull( + "${androidVariant.name}ApiElements", + "${androidVariant.name}RuntimeElements", + androidVariant.compileConfiguration.name, + androidVariant.runtimeConfiguration.name + ) + is KotlinJsCompilation -> listOfNotNull(npmAggregatedConfigurationName, publicPackageJsonConfigurationName) + else -> emptyList() + } + + return defaultConfigurations + implementationSpecificConfigurations + } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt index 38d7b939ecd..2ed139e0bca 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationImpl.kt @@ -127,16 +127,6 @@ internal class KotlinCompilationImpl constructor( override var runtimeDependencyFiles: FileCollection? = configurations.runtimeDependencyConfiguration - @Deprecated("Scheduled for removal with Kotlin 2.0") - override val relatedConfigurationNames: List = listOfNotNull( - apiConfigurationName, - implementationConfigurationName, - compileOnlyConfigurationName, - runtimeOnlyConfigurationName, - compileDependencyConfigurationName, - runtimeDependencyConfigurationName - ) - override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) { HasKotlinDependencies(project, configurations).dependencies(configure) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt index 98acd449318..97e155c076d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt @@ -219,9 +219,7 @@ private fun KotlinTargetComponent.findUsageContext(configurationName: String): U return usageContexts.find { usageContext -> if (usageContext !is KotlinUsageContext) return@find false val compilation = usageContext.compilation - @Suppress("DEPRECATION") - configurationName in compilation.relatedConfigurationNames || - configurationName == compilation.target.apiElementsConfigurationName || + configurationName == compilation.target.apiElementsConfigurationName || configurationName == compilation.target.runtimeElementsConfigurationName } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragment.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragment.kt index 52f74893b4e..c52c913c9ac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragment.kt @@ -63,13 +63,6 @@ interface GradleKpmFragment : KpmFragment, HasKotlinDependencies, GradleKpmFragm override val runtimeOnlyConfigurationName: String get() = runtimeOnlyConfiguration.name - - @Deprecated("Scheduled for removal with Kotlin 2.0") - @Suppress("DEPRECATION") - override val relatedConfigurationNames: List - get() = super.relatedConfigurationNames + - // TODO: resolvable metadata configurations? - listOf(transitiveApiConfiguration.name, transitiveImplementationConfiguration.name) } val GradleKpmFragment.path: String 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 a80b98d17e9..4d468d73c71 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 @@ -40,8 +40,15 @@ internal abstract class KotlinSourceSetFactory internal con } private fun defineSourceSetConfigurations(project: Project, sourceSet: KotlinSourceSet) = with(project.configurations) { - @Suppress("DEPRECATION") - sourceSet.relatedConfigurationNames.forEach { configurationName -> + val configurationNames = sourceSet.run { + listOfNotNull( + apiConfigurationName, + implementationConfigurationName, + compileOnlyConfigurationName, + runtimeOnlyConfigurationName, + ) + } + configurationNames.forEach { configurationName -> maybeCreate(configurationName).apply { if (!configurationName.endsWith(METADATA_CONFIGURATION_NAME_SUFFIX)) { isCanBeResolved = false diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt index 7a2e7739f0d..c0e8c2e72d0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt @@ -60,11 +60,6 @@ open class KotlinJsCompilation @Inject internal constructor( val publicPackageJsonConfigurationName get() = compilation.disambiguateName("publicPackageJsonConfiguration") - @Deprecated("Scheduled for removal with Kotlin 2.0") - @Suppress("DEPRECATION") - override val relatedConfigurationNames: List - get() = super.relatedConfigurationNames + npmAggregatedConfigurationName + publicPackageJsonConfigurationName - override fun getAttributes(): AttributeContainer { return compilation.attributes } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt index feb70ed2aa6..946030514ff 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt @@ -49,13 +49,4 @@ open class KotlinJvmAndroidCompilation @Inject internal constructor( val compileJavaTaskProvider: TaskProvider get() = androidVariant.getJavaTaskProvider() - @Deprecated("Scheduled for removal with Kotlin 2.0") - @Suppress("DEPRECATION") - override val relatedConfigurationNames: List - get() = compilation.relatedConfigurationNames + listOf( - "${androidVariant.name}ApiElements", - "${androidVariant.name}RuntimeElements", - androidVariant.compileConfiguration.name, - androidVariant.runtimeConfiguration.name - ) }