[Gradle] resolvableMetadataConfiguration: Use named configuration and extendsFrom
^KT-55289 Verification Pending
This commit is contained in:
committed by
Space Team
parent
f0ac427f46
commit
a438c12bf5
+1
-3
@@ -121,9 +121,7 @@ internal class GranularMetadataTransformation(
|
||||
kotlinSourceSet.internal.resolvableMetadataConfiguration.incoming.dependencies
|
||||
}
|
||||
|
||||
internal val configurationToResolve: Configuration by lazy {
|
||||
kotlinSourceSet.internal.resolvableMetadataConfiguration
|
||||
}
|
||||
internal val configurationToResolve: Configuration = kotlinSourceSet.internal.resolvableMetadataConfiguration
|
||||
|
||||
private fun doTransform(): Iterable<MetadataDependencyResolution> {
|
||||
val result = mutableListOf<MetadataDependencyResolution>()
|
||||
|
||||
+37
-16
@@ -5,42 +5,57 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.markResolvable
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.METADATA_CONFIGURATION_NAME_SUFFIX
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.disambiguateName
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.ALL_COMPILE_METADATA_CONFIGURATION_NAME
|
||||
import org.jetbrains.kotlin.gradle.utils.listProperty
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.tooling.core.extrasLazyProperty
|
||||
|
||||
/**
|
||||
* @see resolvableMetadataConfiguration
|
||||
*/
|
||||
internal val InternalKotlinSourceSet.resolvableMetadataConfigurationName: String
|
||||
get() = disambiguateName(lowerCamelCaseName("resolvable", METADATA_CONFIGURATION_NAME_SUFFIX))
|
||||
|
||||
/**
|
||||
* Represents a 'resolvable' configuration containing all dependencies in compile scope.
|
||||
* These dependencies are set up to resolve Kotlin Metadata (without transformation) and will resolve
|
||||
* consistently across the whole project.
|
||||
*
|
||||
* Creating this configuration will resolve dependency scope configurations on the given SourceSet.
|
||||
*/
|
||||
internal val InternalKotlinSourceSet.resolvableMetadataConfiguration: Configuration by extrasLazyProperty(
|
||||
"resolvableMetadataConfiguration"
|
||||
) {
|
||||
val configuration = project.configurations.detachedConfiguration()
|
||||
assert(resolvableMetadataConfigurationName !in project.configurations.names)
|
||||
val configuration = project.configurations.maybeCreate(resolvableMetadataConfigurationName)
|
||||
configuration.markResolvable()
|
||||
|
||||
((getVisibleSourceSetsFromAssociateCompilations(this) + this).withDependsOnClosure).forEach { visibleSourceSet ->
|
||||
configuration.dependencies.addAll(
|
||||
project.configurations.getByName(visibleSourceSet.apiConfigurationName).incoming.dependencies
|
||||
)
|
||||
|
||||
configuration.dependencies.addAll(
|
||||
project.configurations.getByName(visibleSourceSet.implementationConfigurationName).incoming.dependencies
|
||||
)
|
||||
|
||||
configuration.dependencies.addAll(
|
||||
project.configurations.getByName(visibleSourceSet.compileOnlyConfigurationName).incoming.dependencies
|
||||
)
|
||||
withDependsOnClosure.forAll { sourceSet ->
|
||||
configuration.extendsFrom(project.configurations.getByName(sourceSet.apiConfigurationName))
|
||||
configuration.extendsFrom(project.configurations.getByName(sourceSet.implementationConfigurationName))
|
||||
configuration.extendsFrom(project.configurations.getByName(sourceSet.compileOnlyConfigurationName))
|
||||
}
|
||||
|
||||
/**
|
||||
* Adding dependencies from associate compilations using a listProvider, since we would like to defer
|
||||
* the call to 'getVisibleSourceSetsFromAssociateCompilations' as much as possible (changes to the model might significantly
|
||||
* change the result of this visible source sets)
|
||||
*/
|
||||
configuration.dependencies.addAllLater(project.listProvider {
|
||||
getVisibleSourceSetsFromAssociateCompilations(this).flatMap { sourceSet ->
|
||||
project.configurations.getByName(sourceSet.apiConfigurationName).allDependencies +
|
||||
project.configurations.getByName(sourceSet.implementationConfigurationName).allDependencies +
|
||||
project.configurations.getByName(sourceSet.compileOnlyConfigurationName).allDependencies
|
||||
}
|
||||
})
|
||||
|
||||
val allCompileMetadataConfiguration = project.configurations.getByName(ALL_COMPILE_METADATA_CONFIGURATION_NAME)
|
||||
|
||||
/* Ensure consistent dependency resolution result within the whole module */
|
||||
@@ -49,3 +64,9 @@ internal val InternalKotlinSourceSet.resolvableMetadataConfiguration: Configurat
|
||||
|
||||
configuration
|
||||
}
|
||||
|
||||
private inline fun <reified T> Project.listProvider(noinline provider: () -> List<T>): Provider<List<T>> {
|
||||
return project.objects.listProperty<T>().apply {
|
||||
set(project.provider(provider))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user