name.remal.gradle_plugins.dsl.extensions.org.gradle.api.artifacts.ConfigurationContainer.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-plugins-kotlin-dsl Show documentation
Show all versions of gradle-plugins-kotlin-dsl Show documentation
Remal Gradle plugins: gradle-plugins-kotlin-dsl
package name.remal.gradle_plugins.dsl.extensions
import name.remal.concurrentMapOf
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.artifacts.Dependency
fun ConfigurationContainer.createDependencyTransformConfiguration(configuration: Configuration, newConfigurationName: String, isRecursive: Boolean = true, transformer: (dependency: Dependency) -> Dependency): Configuration {
val resultConf = create(newConfigurationName)
val dependenciesMapping = concurrentMapOf()
val dependenciesCollection = if (isRecursive) configuration.allDependencies else configuration.dependencies
dependenciesCollection.whenObjectAdded { dependency ->
val transformedDependency = transformer(dependency)
dependenciesMapping[dependency] = transformedDependency
resultConf.dependencies.add(transformedDependency)
}
dependenciesCollection.whenObjectRemoved { dependency ->
dependenciesMapping[dependency]?.let { resultConf.dependencies.remove(it) }
}
return resultConf
}