name.remal.gradle_plugins.dsl.extensions.org.gradle.api.NamedDomainObjectContainer.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 org.gradle.api.NamedDomainObjectContainer
fun NamedDomainObjectContainer.getOrCreate(name: String, onCreate: (T) -> Unit = {}): T {
findByName(name)?.let { return it }
return create(name, onCreate)
}
fun NamedDomainObjectContainer.createWithUniqueName(namePrefix: String = "", configurer: (T) -> Unit = {}): T {
lateinit var name: String
run {
var num = 0
while (true) {
++num
name = "$namePrefix\$$num"
if (null == this.findByName(name)) break
}
}
return create(name, configurer)
}
fun NamedDomainObjectContainer.createWithOptionalUniqueSuffix(name: String, configurer: (T) -> Unit = {}): T {
if (name !in this) {
return create(name, configurer)
}
var num = 0
while (true) {
++num
val nameWithSuffix = "$name\$$num"
if (null == this.findByName(name)) {
return create(nameWithSuffix, configurer)
}
}
}
inline fun NamedDomainObjectContainer.forTemp(namePrefix: String = "temp", action: (T) -> R): R {
val obj = createWithUniqueName(namePrefix)
try {
return action(obj)
} finally {
remove(obj)
}
}