From d5936a52f0c6a4dd5ffaa3a643f17259740293f5 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Thu, 19 Jan 2023 10:08:40 +0100 Subject: [PATCH] [Gradle] Move hostSpecificMetadataConfiguration to configuration container Previously it was declared on KotlinNativeCompilation with extra NativeCompilationDependencyConfigurationsContainer interface. But it is not necessary, and hostSpecificMetadataConfiguration can be placed directly to KotlinCompilationConfigurationsContainer and guarded and created on demand via `withHostSpecificMetadata` flag on a factory method. ^KT-49933 --- .../plugin/mpp/SourceSetVisibilityProvider.kt | 7 +-- ...otlinCompilationConfigurationsContainer.kt | 2 + ...lationDependencyConfigurationsFactories.kt | 44 ++++++++----------- .../targets/native/KotlinNativeCompilation.kt | 5 --- 4 files changed, 24 insertions(+), 34 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt index baceebe7740..1c815fa8bc0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt @@ -38,9 +38,10 @@ private fun Project.collectAllPlatformCompilationData(): List.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData( allSourceSets = allKotlinSourceSets.map { it.name }.toSet(), - resolvedDependenciesConfiguration = LazyResolvedConfiguration(project.configurations.getByName(compileDependencyConfigurationName)), - hostSpecificMetadataConfiguration = (this as? KotlinNativeCompilation) - ?.hostSpecificMetadataConfiguration + resolvedDependenciesConfiguration = LazyResolvedConfiguration(internal.configurations.compileDependencyConfiguration), + hostSpecificMetadataConfiguration = internal + .configurations + .hostSpecificMetadataConfiguration ?.let(::LazyResolvedConfiguration) ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationConfigurationsContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationConfigurationsContainer.kt index 8389969071c..5e8257f5ebf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationConfigurationsContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationConfigurationsContainer.kt @@ -21,6 +21,7 @@ interface KotlinCompilationConfigurationsContainer { val runtimeOnlyConfiguration: Configuration val compileDependencyConfiguration: Configuration val runtimeDependencyConfiguration: Configuration? + val hostSpecificMetadataConfiguration: Configuration? val pluginConfiguration: Configuration } @@ -33,6 +34,7 @@ internal class DefaultKotlinCompilationConfigurationsContainer( override val runtimeOnlyConfiguration: Configuration, override val compileDependencyConfiguration: Configuration, override val runtimeDependencyConfiguration: Configuration?, + override val hostSpecificMetadataConfiguration: Configuration?, override val pluginConfiguration: Configuration ) : KotlinCompilationConfigurationsContainer diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt index 0799c89f54c..4729a9432f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt @@ -39,39 +39,17 @@ internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory : internal object NativeKotlinCompilationDependencyConfigurationsFactory : KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory { - override fun create(target: KotlinTarget, compilationName: String): NativeCompilationDependencyConfigurationsContainer { + override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationConfigurationsContainer { val naming = ConfigurationNaming.Default(target, compilationName) - val baseContainer = KotlinCompilationDependencyConfigurationsContainer( + return KotlinCompilationDependencyConfigurationsContainer( target = target, compilationName = compilationName, naming = naming, withRuntime = false, + withHostSpecificMetadata = true, compileClasspathConfigurationName = naming.name("compileKlibraries") ) - - val compilationCoordinates = "${target.disambiguationClassifier}/$compilationName" - val project = target.project - val hostSpecificMetadataConfiguration: Configuration = project - .configurations - .maybeCreate(naming.name(compilation, METADATA_CONFIGURATION_NAME_SUFFIX)) - .apply { - markResolvable() - isVisible = false - description = "Host-specific Metadata dependencies for $compilationCoordinates" - extendsFrom(baseContainer.compileDependencyConfiguration) - copyAttributes(from = baseContainer.compileDependencyConfiguration.attributes, to = attributes) - attributes { - it.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) - } - } - - return NativeCompilationDependencyConfigurationsContainer(baseContainer, hostSpecificMetadataConfiguration) } - - class NativeCompilationDependencyConfigurationsContainer( - baseContainer: KotlinCompilationConfigurationsContainer, - val hostSpecificMetadataConfiguration: Configuration? - ) : KotlinCompilationConfigurationsContainer by baseContainer } internal object JsKotlinCompilationDependencyConfigurationsFactory : @@ -138,7 +116,7 @@ private const val compileClasspath = "compileClasspath" private const val runtimeClasspath = "runtimeClasspath" private fun KotlinCompilationDependencyConfigurationsContainer( - target: KotlinTarget, compilationName: String, withRuntime: Boolean, + target: KotlinTarget, compilationName: String, withRuntime: Boolean, withHostSpecificMetadata: Boolean = false, naming: ConfigurationNaming = ConfigurationNaming.Default(target, compilationName), apiConfigurationName: String = naming.name(compilation, API), implementationConfigurationName: String = naming.name(compilation, IMPLEMENTATION), @@ -146,6 +124,7 @@ private fun KotlinCompilationDependencyConfigurationsContainer( runtimeOnlyConfigurationName: String = naming.name(compilation, RUNTIME_ONLY), compileClasspathConfigurationName: String = naming.name(compileClasspath), runtimeClasspathConfigurationName: String = naming.name(runtimeClasspath), + withHostSpecificMetadataConfigurationName: String = naming.name(compilation, METADATA_CONFIGURATION_NAME_SUFFIX), pluginConfigurationName: String = lowerCamelCaseName( PLUGIN_CLASSPATH_CONFIGURATION_NAME, target.disambiguationClassifier, @@ -240,6 +219,18 @@ private fun KotlinCompilationDependencyConfigurationsContainer( description = "Runtime classpath of $compilationCoordinates." } else null + val hostSpecificMetadataConfiguration = + if (withHostSpecificMetadata) target.project.configurations.maybeCreate(withHostSpecificMetadataConfigurationName).apply { + markResolvable() + isVisible = false + description = "Host-specific Metadata dependencies for $compilationCoordinates" + extendsFrom(compileDependencyConfiguration) + copyAttributes(from = compileDependencyConfiguration.attributes, to = attributes) + attributes { + it.attribute(Usage.USAGE_ATTRIBUTE, target.project.usageByName(KotlinUsages.KOTLIN_METADATA)) + } + } else null + val pluginConfiguration = target.project.configurations.maybeCreate(pluginConfigurationName).apply { addGradlePluginMetadataAttributes(target.project) @@ -263,6 +254,7 @@ private fun KotlinCompilationDependencyConfigurationsContainer( runtimeOnlyConfiguration = runtimeOnlyConfiguration, compileDependencyConfiguration = compileDependencyConfiguration, runtimeDependencyConfiguration = runtimeDependencyConfiguration, + hostSpecificMetadataConfiguration = hostSpecificMetadataConfiguration, pluginConfiguration = pluginConfiguration ) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt index 539e527cfb3..0b0d4d4f094 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt @@ -14,7 +14,6 @@ import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.NativeKotlinCompilationDependencyConfigurationsFactory.NativeCompilationDependencyConfigurationsContainer import org.jetbrains.kotlin.gradle.targets.native.NativeCompilerOptions import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -70,10 +69,6 @@ open class KotlinNativeCompilation @Inject internal constructor( val binariesTaskName: String get() = lowerCamelCaseName(target.disambiguationClassifier, compilation.compilationName, "binaries") - internal val hostSpecificMetadataConfiguration: Configuration? get() { - val container = compilation.configurations as? NativeCompilationDependencyConfigurationsContainer - return container?.hostSpecificMetadataConfiguration - } } open class KotlinSharedNativeCompilation @Inject internal constructor(