[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
|
kotlinSourceSet.internal.resolvableMetadataConfiguration.incoming.dependencies
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val configurationToResolve: Configuration by lazy {
|
internal val configurationToResolve: Configuration = kotlinSourceSet.internal.resolvableMetadataConfiguration
|
||||||
kotlinSourceSet.internal.resolvableMetadataConfiguration
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun doTransform(): Iterable<MetadataDependencyResolution> {
|
private fun doTransform(): Iterable<MetadataDependencyResolution> {
|
||||||
val result = mutableListOf<MetadataDependencyResolution>()
|
val result = mutableListOf<MetadataDependencyResolution>()
|
||||||
|
|||||||
+37
-16
@@ -5,42 +5,57 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.Configuration
|
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.copyAttributes
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.markResolvable
|
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.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.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.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
|
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.
|
* Represents a 'resolvable' configuration containing all dependencies in compile scope.
|
||||||
* These dependencies are set up to resolve Kotlin Metadata (without transformation) and will resolve
|
* These dependencies are set up to resolve Kotlin Metadata (without transformation) and will resolve
|
||||||
* consistently across the whole project.
|
* consistently across the whole project.
|
||||||
*
|
|
||||||
* Creating this configuration will resolve dependency scope configurations on the given SourceSet.
|
|
||||||
*/
|
*/
|
||||||
internal val InternalKotlinSourceSet.resolvableMetadataConfiguration: Configuration by extrasLazyProperty(
|
internal val InternalKotlinSourceSet.resolvableMetadataConfiguration: Configuration by extrasLazyProperty(
|
||||||
"resolvableMetadataConfiguration"
|
"resolvableMetadataConfiguration"
|
||||||
) {
|
) {
|
||||||
val configuration = project.configurations.detachedConfiguration()
|
assert(resolvableMetadataConfigurationName !in project.configurations.names)
|
||||||
|
val configuration = project.configurations.maybeCreate(resolvableMetadataConfigurationName)
|
||||||
configuration.markResolvable()
|
configuration.markResolvable()
|
||||||
|
|
||||||
((getVisibleSourceSetsFromAssociateCompilations(this) + this).withDependsOnClosure).forEach { visibleSourceSet ->
|
withDependsOnClosure.forAll { sourceSet ->
|
||||||
configuration.dependencies.addAll(
|
configuration.extendsFrom(project.configurations.getByName(sourceSet.apiConfigurationName))
|
||||||
project.configurations.getByName(visibleSourceSet.apiConfigurationName).incoming.dependencies
|
configuration.extendsFrom(project.configurations.getByName(sourceSet.implementationConfigurationName))
|
||||||
)
|
configuration.extendsFrom(project.configurations.getByName(sourceSet.compileOnlyConfigurationName))
|
||||||
|
|
||||||
configuration.dependencies.addAll(
|
|
||||||
project.configurations.getByName(visibleSourceSet.implementationConfigurationName).incoming.dependencies
|
|
||||||
)
|
|
||||||
|
|
||||||
configuration.dependencies.addAll(
|
|
||||||
project.configurations.getByName(visibleSourceSet.compileOnlyConfigurationName).incoming.dependencies
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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)
|
val allCompileMetadataConfiguration = project.configurations.getByName(ALL_COMPILE_METADATA_CONFIGURATION_NAME)
|
||||||
|
|
||||||
/* Ensure consistent dependency resolution result within the whole module */
|
/* Ensure consistent dependency resolution result within the whole module */
|
||||||
@@ -49,3 +64,9 @@ internal val InternalKotlinSourceSet.resolvableMetadataConfiguration: Configurat
|
|||||||
|
|
||||||
configuration
|
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