class Providers(private val project: Project) { fun toProvider(list: Iterable>): Provider> { val seed = project.providers.provider { emptyList() } return list .filter { it.isPresent } .fold(seed) { acc: Provider>, provider -> acc.zip(provider) { list, item -> list + item } } } fun toProvider2(list: Iterable>): Provider> { return project.provider { list .filter { it.isPresent } .map { it.get() } } } } internal class ProvidersTest { private val project = ProjectBuilder.builder().build() private val providerFactory = project.providers private val providers = Providers(project) @Test fun `can convert list of providers to provider of lists`() { // Given val a = providerFactory.provider { "a" } val b = providerFactory.provider { "b" } val notPresent = providerFactory.gradleProperty("notpresent") val listOfProviders = listOf(a, b, notPresent) // Expect assertThat(providers.toProvider(listOfProviders).get()).containsExactly("a", "b") assertThat(providers.toProvider2(listOfProviders).get()).containsExactly("a", "b") } }