[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(
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)
)
@@ -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
@@ -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
)
}
@@ -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(