[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
This commit is contained in:
Anton Lakotka
2023-01-19 10:08:40 +01:00
committed by Space Team
parent e36338b091
commit d5936a52f0
4 changed files with 24 additions and 34 deletions
@@ -38,9 +38,10 @@ private fun Project.collectAllPlatformCompilationData(): List<SourceSetVisibilit
private fun KotlinCompilation<*>.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData( private fun KotlinCompilation<*>.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData(
allSourceSets = allKotlinSourceSets.map { it.name }.toSet(), allSourceSets = allKotlinSourceSets.map { it.name }.toSet(),
resolvedDependenciesConfiguration = LazyResolvedConfiguration(project.configurations.getByName(compileDependencyConfigurationName)), resolvedDependenciesConfiguration = LazyResolvedConfiguration(internal.configurations.compileDependencyConfiguration),
hostSpecificMetadataConfiguration = (this as? KotlinNativeCompilation) hostSpecificMetadataConfiguration = internal
?.hostSpecificMetadataConfiguration .configurations
.hostSpecificMetadataConfiguration
?.let(::LazyResolvedConfiguration) ?.let(::LazyResolvedConfiguration)
) )
@@ -21,6 +21,7 @@ interface KotlinCompilationConfigurationsContainer {
val runtimeOnlyConfiguration: Configuration val runtimeOnlyConfiguration: Configuration
val compileDependencyConfiguration: Configuration val compileDependencyConfiguration: Configuration
val runtimeDependencyConfiguration: Configuration? val runtimeDependencyConfiguration: Configuration?
val hostSpecificMetadataConfiguration: Configuration?
val pluginConfiguration: Configuration val pluginConfiguration: Configuration
} }
@@ -33,6 +34,7 @@ internal class DefaultKotlinCompilationConfigurationsContainer(
override val runtimeOnlyConfiguration: Configuration, override val runtimeOnlyConfiguration: Configuration,
override val compileDependencyConfiguration: Configuration, override val compileDependencyConfiguration: Configuration,
override val runtimeDependencyConfiguration: Configuration?, override val runtimeDependencyConfiguration: Configuration?,
override val hostSpecificMetadataConfiguration: Configuration?,
override val pluginConfiguration: Configuration override val pluginConfiguration: Configuration
) : KotlinCompilationConfigurationsContainer ) : KotlinCompilationConfigurationsContainer
@@ -39,39 +39,17 @@ internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory :
internal object NativeKotlinCompilationDependencyConfigurationsFactory : internal object NativeKotlinCompilationDependencyConfigurationsFactory :
KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory { 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 naming = ConfigurationNaming.Default(target, compilationName)
val baseContainer = KotlinCompilationDependencyConfigurationsContainer( return KotlinCompilationDependencyConfigurationsContainer(
target = target, target = target,
compilationName = compilationName, compilationName = compilationName,
naming = naming, naming = naming,
withRuntime = false, withRuntime = false,
withHostSpecificMetadata = true,
compileClasspathConfigurationName = naming.name("compileKlibraries") 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 : internal object JsKotlinCompilationDependencyConfigurationsFactory :
@@ -138,7 +116,7 @@ private const val compileClasspath = "compileClasspath"
private const val runtimeClasspath = "runtimeClasspath" private const val runtimeClasspath = "runtimeClasspath"
private fun KotlinCompilationDependencyConfigurationsContainer( private fun KotlinCompilationDependencyConfigurationsContainer(
target: KotlinTarget, compilationName: String, withRuntime: Boolean, target: KotlinTarget, compilationName: String, withRuntime: Boolean, withHostSpecificMetadata: Boolean = false,
naming: ConfigurationNaming = ConfigurationNaming.Default(target, compilationName), naming: ConfigurationNaming = ConfigurationNaming.Default(target, compilationName),
apiConfigurationName: String = naming.name(compilation, API), apiConfigurationName: String = naming.name(compilation, API),
implementationConfigurationName: String = naming.name(compilation, IMPLEMENTATION), implementationConfigurationName: String = naming.name(compilation, IMPLEMENTATION),
@@ -146,6 +124,7 @@ private fun KotlinCompilationDependencyConfigurationsContainer(
runtimeOnlyConfigurationName: String = naming.name(compilation, RUNTIME_ONLY), runtimeOnlyConfigurationName: String = naming.name(compilation, RUNTIME_ONLY),
compileClasspathConfigurationName: String = naming.name(compileClasspath), compileClasspathConfigurationName: String = naming.name(compileClasspath),
runtimeClasspathConfigurationName: String = naming.name(runtimeClasspath), runtimeClasspathConfigurationName: String = naming.name(runtimeClasspath),
withHostSpecificMetadataConfigurationName: String = naming.name(compilation, METADATA_CONFIGURATION_NAME_SUFFIX),
pluginConfigurationName: String = lowerCamelCaseName( pluginConfigurationName: String = lowerCamelCaseName(
PLUGIN_CLASSPATH_CONFIGURATION_NAME, PLUGIN_CLASSPATH_CONFIGURATION_NAME,
target.disambiguationClassifier, target.disambiguationClassifier,
@@ -240,6 +219,18 @@ private fun KotlinCompilationDependencyConfigurationsContainer(
description = "Runtime classpath of $compilationCoordinates." description = "Runtime classpath of $compilationCoordinates."
} else null } 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 { val pluginConfiguration = target.project.configurations.maybeCreate(pluginConfigurationName).apply {
addGradlePluginMetadataAttributes(target.project) addGradlePluginMetadataAttributes(target.project)
@@ -263,6 +254,7 @@ private fun KotlinCompilationDependencyConfigurationsContainer(
runtimeOnlyConfiguration = runtimeOnlyConfiguration, runtimeOnlyConfiguration = runtimeOnlyConfiguration,
compileDependencyConfiguration = compileDependencyConfiguration, compileDependencyConfiguration = compileDependencyConfiguration,
runtimeDependencyConfiguration = runtimeDependencyConfiguration, runtimeDependencyConfiguration = runtimeDependencyConfiguration,
hostSpecificMetadataConfiguration = hostSpecificMetadataConfiguration,
pluginConfiguration = pluginConfiguration pluginConfiguration = pluginConfiguration
) )
} }
@@ -14,7 +14,6 @@ import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl 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.targets.native.NativeCompilerOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -70,10 +69,6 @@ open class KotlinNativeCompilation @Inject internal constructor(
val binariesTaskName: String val binariesTaskName: String
get() = lowerCamelCaseName(target.disambiguationClassifier, compilation.compilationName, "binaries") 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( open class KotlinSharedNativeCompilation @Inject internal constructor(