[Gradle][KPM] Reference Configurations directly

Configurations are not registered/created lazily which makes
referencing NamedDomainObjectProvider over Configurations unnecessary
for now.
This commit is contained in:
sebastian.sellmair
2021-11-29 10:29:29 +01:00
committed by Space
parent 032981dd83
commit 444b88e438
20 changed files with 131 additions and 166 deletions
@@ -9,34 +9,34 @@ import org.gradle.api.NamedDomainObjectProvider
import org.gradle.api.artifacts.Configuration
interface KotlinDependencyConfigurations {
val apiConfiguration: NamedDomainObjectProvider<Configuration>
val implementationConfiguration: NamedDomainObjectProvider<Configuration>
val compileOnlyConfiguration: NamedDomainObjectProvider<Configuration>
val runtimeOnlyConfiguration: NamedDomainObjectProvider<Configuration>
val apiConfiguration: Configuration
val implementationConfiguration: Configuration
val compileOnlyConfiguration: Configuration
val runtimeOnlyConfiguration: Configuration
/** This configuration includes the dependencies from the refines-parents */
val transitiveApiConfiguration: NamedDomainObjectProvider<Configuration>
val transitiveApiConfiguration: Configuration
/** This configuration includes the dependencies from the refines-parents */
val transitiveImplementationConfiguration: NamedDomainObjectProvider<Configuration>
val transitiveImplementationConfiguration: Configuration
private class Impl(
override val apiConfiguration: NamedDomainObjectProvider<Configuration>,
override val implementationConfiguration: NamedDomainObjectProvider<Configuration>,
override val compileOnlyConfiguration: NamedDomainObjectProvider<Configuration>,
override val runtimeOnlyConfiguration: NamedDomainObjectProvider<Configuration>,
override val transitiveApiConfiguration: NamedDomainObjectProvider<Configuration>,
override val transitiveImplementationConfiguration: NamedDomainObjectProvider<Configuration>
override val apiConfiguration: Configuration,
override val implementationConfiguration: Configuration,
override val compileOnlyConfiguration: Configuration,
override val runtimeOnlyConfiguration: Configuration,
override val transitiveApiConfiguration:Configuration,
override val transitiveImplementationConfiguration: Configuration
) : KotlinDependencyConfigurations
companion object {
fun create(
apiConfiguration: NamedDomainObjectProvider<Configuration>,
implementationConfiguration: NamedDomainObjectProvider<Configuration>,
compileOnlyConfiguration: NamedDomainObjectProvider<Configuration>,
runtimeOnlyConfiguration: NamedDomainObjectProvider<Configuration>,
transitiveApiConfiguration: NamedDomainObjectProvider<Configuration>,
transitiveImplementationConfiguration: NamedDomainObjectProvider<Configuration>
apiConfiguration: Configuration,
implementationConfiguration: Configuration,
compileOnlyConfiguration: Configuration,
runtimeOnlyConfiguration: Configuration,
transitiveApiConfiguration: Configuration,
transitiveImplementationConfiguration: Configuration
): KotlinDependencyConfigurations = Impl(
apiConfiguration = apiConfiguration,
implementationConfiguration = implementationConfiguration,
@@ -18,7 +18,7 @@ interface KotlinGradleVariant : KotlinGradleFragment, KotlinModuleVariant {
val platformType: KotlinPlatformType
// TODO generalize with KotlinCompilation?
val compileDependenciesConfiguration: NamedDomainObjectProvider<Configuration>
val compileDependenciesConfiguration: Configuration
var compileDependencyFiles: FileCollection
@@ -29,28 +29,28 @@ interface KotlinGradleVariant : KotlinGradleFragment, KotlinModuleVariant {
val sourceArchiveTaskName: String
// TODO generalize exposing outputs: what if a variant has more than one such configurations or none?
val apiElementsConfiguration: NamedDomainObjectProvider<Configuration>
val apiElementsConfiguration: Configuration
val gradleVariantNames: Set<String>
}
interface KotlinGradleVariantWithRuntime : KotlinGradleVariant {
// TODO deduplicate with KotlinCompilation?
val runtimeDependenciesConfiguration: NamedDomainObjectProvider<Configuration>
val runtimeDependenciesConfiguration: Configuration
var runtimeDependencyFiles: FileCollection
val runtimeFiles: ConfigurableFileCollection
// TODO generalize exposing outputs: what if a variant has more than one such configurations or none?
val runtimeElementsConfiguration: NamedDomainObjectProvider<Configuration>
val runtimeElementsConfiguration: Configuration
}
interface KotlinNativeVariant : KotlinGradleVariant {
override val platformType: KotlinPlatformType
get() = KotlinPlatformType.native
val hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
val hostSpecificMetadataElementsConfiguration: Configuration?
var enableEndorsedLibraries: Boolean
}
@@ -31,14 +31,14 @@ class KotlinJvmVariantFactoryTest : AbstractKpmExtensionTest() {
fun `test accessing configurations`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
variant.compileDependenciesConfiguration.get()
variant.runtimeDependenciesConfiguration.get()
variant.apiElementsConfiguration.get()
variant.runtimeElementsConfiguration.get()
variant.implementationConfiguration.get()
variant.apiConfiguration.get()
variant.runtimeOnlyConfiguration.get()
variant.compileOnlyConfiguration.get()
variant.compileDependenciesConfiguration
variant.runtimeDependenciesConfiguration
variant.apiElementsConfiguration
variant.runtimeElementsConfiguration
variant.implementationConfiguration
variant.apiConfiguration
variant.runtimeOnlyConfiguration
variant.compileOnlyConfiguration
}
@Test
@@ -88,13 +88,13 @@ class KotlinJvmVariantFactoryTest : AbstractKpmExtensionTest() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(compileDependenciesConfigurator = { fragment, configuration ->
assertSame(fragment.compileDependenciesConfiguration.get(), configuration)
assertSame(fragment.compileDependenciesConfiguration, configuration)
configuration.attributes.attribute(testAttribute, "compileDependencies")
})
).create("jvm")
assertEquals(
"compileDependencies", variant.compileDependenciesConfiguration.get().attributes.getAttribute(testAttribute)
"compileDependencies", variant.compileDependenciesConfiguration.attributes.getAttribute(testAttribute)
)
}
@@ -103,13 +103,13 @@ class KotlinJvmVariantFactoryTest : AbstractKpmExtensionTest() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(runtimeDependenciesConfigurator = { fragment, configuration ->
assertSame(fragment.runtimeDependenciesConfiguration.get(), configuration)
assertSame(fragment.runtimeDependenciesConfiguration, configuration)
configuration.attributes.attribute(testAttribute, "runtimeDependencies")
})
).create("jvm")
assertEquals(
"runtimeDependencies", variant.runtimeDependenciesConfiguration.get().attributes.getAttribute(testAttribute)
"runtimeDependencies", variant.runtimeDependenciesConfiguration.attributes.getAttribute(testAttribute)
)
}
@@ -117,13 +117,13 @@ class KotlinJvmVariantFactoryTest : AbstractKpmExtensionTest() {
fun `test custom configure apiElementsConfiguration`() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main), KotlinJvmVariantConfigurator(apiElementsConfigurator = { fragment, configuration ->
assertSame(fragment.apiElementsConfiguration.get(), configuration)
assertSame(fragment.apiElementsConfiguration, configuration)
configuration.attributes.attribute(testAttribute, "apiElements")
})
).create("jvm")
assertEquals(
"apiElements", variant.apiElementsConfiguration.get().attributes.getAttribute(testAttribute)
"apiElements", variant.apiElementsConfiguration.attributes.getAttribute(testAttribute)
)
}
@@ -132,13 +132,13 @@ class KotlinJvmVariantFactoryTest : AbstractKpmExtensionTest() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(runtimeElementsConfigurator = { fragment, configuration ->
assertSame(fragment.runtimeElementsConfiguration.get(), configuration)
assertSame(fragment.runtimeElementsConfiguration, configuration)
configuration.attributes.attribute(testAttribute, "runtimeElements")
})
).create("jvm")
assertEquals(
"runtimeElements", variant.runtimeElementsConfiguration.get().attributes.getAttribute(testAttribute)
"runtimeElements", variant.runtimeElementsConfiguration.attributes.getAttribute(testAttribute)
)
}
@@ -53,7 +53,7 @@ class KotlinNativeVariantFactoryTest(
fun `test compileDependenciesConfiguration - contains konanTarget`() {
assertEquals(
variantConstructor.konanTarget.name,
variant.compileDependenciesConfiguration.get()
variant.compileDependenciesConfiguration
.attributes.getAttribute(KotlinNativeTarget.konanTargetAttribute)
)
}
@@ -62,7 +62,7 @@ class KotlinNativeVariantFactoryTest(
fun `test apiElementsConfiguration - contains konanTarget`() {
assertEquals(
variantConstructor.konanTarget.name,
variant.apiElementsConfiguration.get()
variant.apiElementsConfiguration
.attributes.getAttribute(KotlinNativeTarget.konanTargetAttribute)
)
}
@@ -334,7 +334,7 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
project.configurations.getByName(compilation.compileDependencyConfigurationName)
}
is KotlinPm20ProjectExtension -> {
(requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration.get()
(requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration
}
else -> error("could not find the compile dependencies configuration for variant $requestingVariant")
}
@@ -161,7 +161,7 @@ internal class FragmentGranularMetadataResolver(
// resolve the dependencies of that variant getting the host-specific metadata artifact
relevantVariantResolution?.let { resolution ->
val configurationResolvingPlatformVariant =
(resolution.requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration.get()
(resolution.requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration
val hostSpecificArtifact = ResolvedMppVariantsProvider.get(project)
.getHostSpecificMetadataArtifactByRootModule(
dependencyModule.moduleIdentifier,
@@ -6,9 +6,6 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.locateOrRegister
import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
import org.jetbrains.kotlin.gradle.utils.extendsFrom
interface KotlinDependencyConfigurationsFactory {
fun create(module: KotlinGradleModule, names: FragmentNameDisambiguation): KotlinDependencyConfigurations
@@ -18,12 +15,12 @@ object DefaultKotlinDependencyConfigurationsFactory : KotlinDependencyConfigurat
override fun create(module: KotlinGradleModule, names: FragmentNameDisambiguation): KotlinDependencyConfigurations {
val configurations = module.project.configurations
val apiConfiguration = configurations.locateOrRegister(names.disambiguateName("api"))
val implementationConfiguration = configurations.locateOrRegister(names.disambiguateName("implementation"))
val compileOnlyConfiguration = configurations.locateOrRegister(names.disambiguateName("compileOnly"))
val runtimeOnlyConfiguration = configurations.locateOrRegister(names.disambiguateName("runtimeOnly"))
val transitiveApiConfiguration = configurations.locateOrRegister(names.disambiguateName("transitiveApi"))
val transitiveImplementationConfiguration = configurations.locateOrRegister(names.disambiguateName("transitiveImplementation"))
val apiConfiguration = configurations.maybeCreate(names.disambiguateName("api"))
val implementationConfiguration = configurations.maybeCreate(names.disambiguateName("implementation"))
val compileOnlyConfiguration = configurations.maybeCreate(names.disambiguateName("compileOnly"))
val runtimeOnlyConfiguration = configurations.maybeCreate(names.disambiguateName("runtimeOnly"))
val transitiveApiConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveApi"))
val transitiveImplementationConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveImplementation"))
listOf(
apiConfiguration,
@@ -32,11 +29,9 @@ object DefaultKotlinDependencyConfigurationsFactory : KotlinDependencyConfigurat
runtimeOnlyConfiguration,
transitiveApiConfiguration,
transitiveImplementationConfiguration
).forEach { configurationProvider ->
configurationProvider.configure { configuration ->
configuration.isCanBeConsumed = false
configuration.isCanBeResolved = false
}
).forEach { configuration ->
configuration.isCanBeConsumed = false
configuration.isCanBeResolved = false
}
transitiveApiConfiguration.extendsFrom(apiConfiguration)
@@ -5,14 +5,13 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.NamedDomainObjectProvider
import org.gradle.api.artifacts.Configuration
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
interface KotlinFragmentConfigurationInstantiator {
fun locateOrRegister(
fun create(
module: KotlinGradleModule,
names: FragmentNameDisambiguation,
dependencies: KotlinDependencyConfigurations
): NamedDomainObjectProvider<Configuration>
): Configuration
}
@@ -14,8 +14,7 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.project.model.refinesClosure
object KotlinHostSpecificMetadataArtifactConfigurator :
KotlinGradleFragmentFactory.FragmentConfigurator<KotlinNativeVariantInternal> {
object KotlinHostSpecificMetadataArtifactConfigurator : KotlinGradleFragmentFactory.FragmentConfigurator<KotlinNativeVariantInternal> {
override fun configure(fragment: KotlinNativeVariantInternal) {
val project = fragment.project
val hostSpecificMetadataElements = fragment.hostSpecificMetadataElementsConfiguration ?: return
@@ -36,11 +35,9 @@ object KotlinHostSpecificMetadataArtifactConfigurator :
}
}
hostSpecificMetadataElements.configure { configuration ->
project.artifacts.add(configuration.name, hostSpecificMetadataJar)
configuration.dependencies.addAllLater(project.objects.listProperty(Dependency::class.java).apply {
set(project.provider { fragment.apiElementsConfiguration.get().allDependencies })
})
}
project.artifacts.add(hostSpecificMetadataElements.name, hostSpecificMetadataJar)
hostSpecificMetadataElements.dependencies.addAllLater(project.objects.listProperty(Dependency::class.java).apply {
set(project.provider { fragment.apiElementsConfiguration.allDependencies })
})
}
}
@@ -17,10 +17,10 @@ open class KotlinJvmVariant(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependenciesConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
runtimeDependenciesConfiguration: NamedDomainObjectProvider<Configuration>,
runtimeElementsConfiguration: NamedDomainObjectProvider<Configuration>
compileDependenciesConfiguration: Configuration,
apiElementsConfiguration: Configuration,
runtimeDependenciesConfiguration: Configuration,
runtimeElementsConfiguration: Configuration
) : KotlinGradlePublishedVariantWithRuntime(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -50,10 +50,10 @@ class KotlinJvmVariantInstantiator(
containingModule = module,
fragmentName = name,
dependencyConfigurations = dependencies,
compileDependenciesConfiguration = compileDependenciesConfigurationInstantiator.locateOrRegister(module, names, dependencies),
apiElementsConfiguration = apiElementsConfigurationInstantiator.locateOrRegister(module, names, dependencies),
runtimeDependenciesConfiguration = runtimeDependenciesConfigurationInstantiator.locateOrRegister(module, names, dependencies),
runtimeElementsConfiguration = runtimeElementsConfigurationInstantiator.locateOrRegister(module, names, dependencies)
compileDependenciesConfiguration = compileDependenciesConfigurationInstantiator.create(module, names, dependencies),
apiElementsConfiguration = apiElementsConfigurationInstantiator.create(module, names, dependencies),
runtimeDependenciesConfiguration = runtimeDependenciesConfigurationInstantiator.create(module, names, dependencies),
runtimeElementsConfiguration = runtimeElementsConfigurationInstantiator.create(module, names, dependencies)
)
}
}
@@ -86,24 +86,11 @@ class KotlinJvmVariantConfigurator(
) : KotlinGradleFragmentFactory.FragmentConfigurator<KotlinJvmVariant> {
override fun configure(fragment: KotlinJvmVariant) {
fragment.compileDependenciesConfiguration.configure { configuration ->
compileDependenciesConfigurator.configure(fragment, configuration)
}
fragment.runtimeDependenciesConfiguration.configure { configuration ->
runtimeDependenciesConfigurator.configure(fragment, configuration)
}
fragment.apiElementsConfiguration.configure { configuration ->
apiElementsConfigurator.configure(fragment, configuration)
}
fragment.runtimeElementsConfiguration.configure { configuration ->
runtimeElementsConfigurator.configure(fragment, configuration)
}
compileDependenciesConfigurator.configure(fragment, fragment.compileDependenciesConfiguration)
runtimeDependenciesConfigurator.configure(fragment, fragment.runtimeDependenciesConfiguration)
apiElementsConfigurator.configure(fragment, fragment.apiElementsConfiguration)
runtimeElementsConfigurator.configure(fragment, fragment.runtimeElementsConfiguration)
sourceDirectoriesConfigurator.configure(fragment)
compileTaskConfigurator.registerCompileTasks(fragment)
sourceArchiveTaskConfigurator.registerSourceArchiveTask(fragment)
publicationConfigurator.configure(fragment)
@@ -20,9 +20,9 @@ abstract class KotlinNativeVariantInternal(
fragmentName: String,
val konanTarget: KonanTarget,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
final override val hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
final override val hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariant,
KotlinGradleVariantInternal(
containingModule = containingModule,
@@ -52,18 +52,18 @@ class KotlinNativeVariantConstructor<T : KotlinNativeVariantInternal>(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) -> T
) {
operator fun invoke(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
): T = constructor(
containingModule, fragmentName,
dependencyConfigurations,
@@ -78,9 +78,9 @@ open class KotlinLinuxX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -101,9 +101,9 @@ open class KotlinMacosX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -123,9 +123,9 @@ open class KotlinMacosX64Variant @Inject constructor(
open class KotlinMacosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -146,9 +146,9 @@ open class KotlinIosX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -169,9 +169,9 @@ open class KotlinIosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
hostSpecificMetadataElementsConfiguration: NamedDomainObjectProvider<Configuration>?
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -44,10 +44,10 @@ class KotlinNativeVariantInstantiator<T : KotlinNativeVariantInternal>(
containingModule = module,
fragmentName = name,
dependencyConfigurations = dependencies,
compileDependencyConfiguration = compileDependenciesConfigurationInstantiator.locateOrRegister(module, names, dependencies),
apiElementsConfiguration = apiElementsConfigurationInstantiator.locateOrRegister(module, names, dependencies),
compileDependencyConfiguration = compileDependenciesConfigurationInstantiator.create(module, names, dependencies),
apiElementsConfiguration = apiElementsConfigurationInstantiator.create(module, names, dependencies),
hostSpecificMetadataElementsConfiguration =
hostSpecificMetadataElementsConfigurationInstantiator?.locateOrRegister(module, names, dependencies)
hostSpecificMetadataElementsConfigurationInstantiator?.create(module, names, dependencies)
)
}
}
@@ -79,18 +79,11 @@ class KotlinNativeVariantConfigurator<T : KotlinNativeVariantInternal>(
) : KotlinGradleFragmentFactory.FragmentConfigurator<T> {
override fun configure(fragment: T) {
fragment.compileDependenciesConfiguration.configure { configuration ->
compileDependenciesConfigurator.configure(fragment, configuration)
}
fragment.apiElementsConfiguration.configure { configuration ->
apiElementsConfigurator.configure(fragment, configuration)
}
fragment.hostSpecificMetadataElementsConfiguration?.configure { configuration ->
compileDependenciesConfigurator.configure(fragment, fragment.compileDependenciesConfiguration)
apiElementsConfigurator.configure(fragment, fragment.apiElementsConfiguration)
fragment.hostSpecificMetadataElementsConfiguration?.let { configuration ->
hostSpecificMetadataElementsConfigurator.configure(fragment, configuration)
}
hostSpecificMetadataArtifactConfigurator.configure(fragment)
sourceDirectoriesConfigurator.configure(fragment)
compileTaskConfigurator.registerCompileTasks(fragment)
@@ -54,7 +54,7 @@ internal open class TransformKotlinGranularMetadataForFragment
val participatingFragments = fragment.refinesClosure
val participatingCompilations = participatingFragments.flatMap { it.containingModule.variantsContainingFragment(it) }
participatingCompilations.associate { variant ->
variant.fragmentName to variant.compileDependenciesConfiguration.get()
variant.fragmentName to variant.compileDependenciesConfiguration
.allDependencies.map { listOf(it.group, it.name, it.version) }.toSet()
}
}
@@ -25,8 +25,8 @@ abstract class KotlinGradleVariantInternal(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
final override val compileDependenciesConfiguration: NamedDomainObjectProvider<Configuration>,
final override val apiElementsConfiguration: NamedDomainObjectProvider<Configuration>
final override val compileDependenciesConfiguration: Configuration,
final override val apiElementsConfiguration: Configuration
) : KotlinGradleFragmentInternal(
containingModule, fragmentName, dependencyConfigurations
), KotlinGradleVariant {
@@ -34,7 +34,7 @@ abstract class KotlinGradleVariantInternal(
override val variantAttributes: Map<KotlinAttributeKey, String>
get() = mapOf(KotlinPlatformTypeAttribute to kotlinPlatformTypeAttributeFromPlatform(platformType)) // TODO user attributes
override var compileDependencyFiles: FileCollection = project.files({ compileDependenciesConfiguration.get() })
override var compileDependencyFiles: FileCollection = project.files({ compileDependenciesConfiguration })
internal abstract val compilationData: KotlinVariantCompilationDataInternal<*>
@@ -80,10 +80,10 @@ abstract class KotlinGradleVariantWithRuntimeInternal(
containingModule: KotlinGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
final override val runtimeDependenciesConfiguration: NamedDomainObjectProvider<Configuration>,
final override val runtimeElementsConfiguration: NamedDomainObjectProvider<Configuration>
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
final override val runtimeDependenciesConfiguration: Configuration,
final override val runtimeElementsConfiguration: Configuration
) : KotlinGradleVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -105,10 +105,10 @@ private fun defaultModuleSuffix(module: KotlinGradleModule, variantName: String)
abstract class KotlinGradlePublishedVariantWithRuntime(
containingModule: KotlinGradleModule, fragmentName: String,
dependencyConfigurations: KotlinDependencyConfigurations,
compileDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
apiElementsConfiguration: NamedDomainObjectProvider<Configuration>,
runtimeDependencyConfiguration: NamedDomainObjectProvider<Configuration>,
runtimeElementsConfiguration: NamedDomainObjectProvider<Configuration>
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
runtimeDependencyConfiguration: Configuration,
runtimeElementsConfiguration: Configuration
) : KotlinGradleVariantWithRuntimeInternal(
containingModule = containingModule,
fragmentName = fragmentName,
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configuration
import org.gradle.api.NamedDomainObjectProvider
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.Category
@@ -13,22 +12,21 @@ import org.gradle.jvm.tasks.Jar
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.locateOrRegister
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
interface KotlinApiElementsConfigurationInstantiator : KotlinFragmentConfigurationInstantiator
object DefaultKotlinApiElementsConfigurationInstantiator : KotlinApiElementsConfigurationInstantiator {
override fun locateOrRegister(
override fun create(
module: KotlinGradleModule,
names: FragmentNameDisambiguation,
dependencies: KotlinDependencyConfigurations
): NamedDomainObjectProvider<Configuration> {
return module.project.configurations.locateOrRegister(names.disambiguateName("apiElements")) {
): Configuration {
return module.project.configurations.maybeCreate(names.disambiguateName("apiElements")).apply {
isCanBeResolved = false
isCanBeConsumed = false
extendsFrom(dependencies.transitiveApiConfiguration.get())
extendsFrom(dependencies.transitiveApiConfiguration)
module.ifMadePublic { isCanBeConsumed = true }
attributes.attribute(Category.CATEGORY_ATTRIBUTE, module.project.objects.named(Category::class.java, Category.LIBRARY))
@@ -16,12 +16,12 @@ import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
interface KotlinCompileDependenciesConfigurationInstantiator : KotlinFragmentConfigurationInstantiator
object DefaultKotlinCompileDependenciesConfigurationInstantiator : KotlinCompileDependenciesConfigurationInstantiator {
override fun locateOrRegister(
override fun create(
module: KotlinGradleModule,
names: FragmentNameDisambiguation,
dependencies: KotlinDependencyConfigurations
): NamedDomainObjectProvider<Configuration> {
return module.project.configurations.locateOrRegister(names.disambiguateName("compileDependencies")) {
): Configuration {
return module.project.configurations.maybeCreate(names.disambiguateName("compileDependencies")).apply {
isCanBeConsumed = false
isCanBeResolved = true
module.project.addExtendsFromRelation(name, dependencies.transitiveApiConfiguration.name)
@@ -7,12 +7,10 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configuration
import org.gradle.api.NamedDomainObjectProvider
import org.gradle.api.artifacts.Configuration
import org.jetbrains.kotlin.gradle.plugin.mpp.isHostSpecificKonanTargetsSet
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.locateOrRegister
import org.jetbrains.kotlin.konan.target.KonanTarget
interface KotlinHostSpecificMetadataElementsConfigurationInstantiator : KotlinFragmentConfigurationInstantiator
@@ -24,10 +22,10 @@ fun DefaultKotlinHostSpecificMetadataElementsConfigurationInstantiator(
private object DefaultKotlinHostSpecificMetadataElementsConfigurationInstantiator :
KotlinHostSpecificMetadataElementsConfigurationInstantiator {
override fun locateOrRegister(
override fun create(
module: KotlinGradleModule, names: FragmentNameDisambiguation, dependencies: KotlinDependencyConfigurations
): NamedDomainObjectProvider<Configuration> {
return module.project.configurations.locateOrRegister(names.disambiguateName("hostSpecificMetadataElements")) {
): Configuration {
return module.project.configurations.maybeCreate(names.disambiguateName("hostSpecificMetadataElements")).apply {
isCanBeResolved = false
isCanBeConsumed = false
}
@@ -15,12 +15,12 @@ import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
interface KotlinRuntimeDependenciesConfigurationInstantiator : KotlinFragmentConfigurationInstantiator
object DefaultKotlinRuntimeDependenciesConfigurationInstantiator : KotlinRuntimeDependenciesConfigurationInstantiator {
override fun locateOrRegister(
override fun create(
module: KotlinGradleModule,
names: FragmentNameDisambiguation,
dependencies: KotlinDependencyConfigurations
): NamedDomainObjectProvider<Configuration> {
return module.project.configurations.locateOrRegister(names.disambiguateName("runtimeDependencies")) {
): Configuration {
return module.project.configurations.maybeCreate(names.disambiguateName("runtimeDependencies")).apply {
isCanBeConsumed = false
isCanBeResolved = true
module.project.addExtendsFromRelation(name, dependencies.transitiveApiConfiguration.name)
@@ -5,32 +5,30 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configuration
import org.gradle.api.NamedDomainObjectProvider
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.Category
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinFragmentModuleCapabilityConfigurator.setModuleCapability
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.locateOrRegister
interface KotlinRuntimeElementsConfigurationFactory : KotlinFragmentConfigurationInstantiator
object DefaultKotlinRuntimeElementsConfigurationInstantiator : KotlinRuntimeElementsConfigurationFactory {
override fun locateOrRegister(
override fun create(
module: KotlinGradleModule,
names: FragmentNameDisambiguation,
dependencies: KotlinDependencyConfigurations
): NamedDomainObjectProvider<Configuration> {
return module.project.configurations.locateOrRegister(names.disambiguateName("runtimeElements")) {
): Configuration {
return module.project.configurations.maybeCreate(names.disambiguateName("runtimeElements")).apply {
isCanBeResolved = false
isCanBeConsumed = false
attributes.attribute(Category.CATEGORY_ATTRIBUTE, module.project.objects.named(Category::class.java, Category.LIBRARY))
attributes.attribute(Bundling.BUNDLING_ATTRIBUTE, module.project.objects.named(Bundling::class.java, Bundling.EXTERNAL))
extendsFrom(dependencies.transitiveApiConfiguration.get())
extendsFrom(dependencies.transitiveImplementationConfiguration.get())
extendsFrom(dependencies.transitiveApiConfiguration)
extendsFrom(dependencies.transitiveImplementationConfiguration)
module.ifMadePublic {
isCanBeConsumed = true
setModuleCapability(this, module)