All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.gradle_plugins.dsl.extensions.org.gradle.api.NamedDomainObjectContainer.kt Maven / Gradle / Ivy

There is a newer version: 1.9.2
Show newest version
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)
    }
}






© 2015 - 2024 Weber Informatics LLC | Privacy Policy