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

name.remal.gradle_plugins.dsl.extensions.org.gradle.api.PolymorphicDomainObjectContainer.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.PolymorphicDomainObjectContainer

fun  PolymorphicDomainObjectContainer.getOrCreate(name: String, configurer: (T) -> Unit = {}): T {
    return findByName(name) ?: create(name, configurer)
}

fun  PolymorphicDomainObjectContainer.getOrCreate(name: String, type: Class, configurer: (S) -> Unit = {}): T {
    return findByName(name) ?: create(name, type, configurer)
}

fun  PolymorphicDomainObjectContainer.createWithUniqueName(namePrefix: String, type: Class, configurer: (S) -> Unit = {}): S {
    removeDefaultObjects()

    var num = 0
    while (true) {
        ++num
        val nameWithSuffix = "$namePrefix\$$num"
        if (nameWithSuffix !in this) {
            return create(nameWithSuffix, type, configurer)
        }
    }
}

fun  PolymorphicDomainObjectContainer.createWithUniqueName(type: Class, configurer: (S) -> Unit = {}): S = createWithUniqueName(type.simpleName, type, configurer)

fun  PolymorphicDomainObjectContainer.createWithOptionalUniqueSuffix(name: String, type: Class, configurer: (S) -> Unit = {}): S {
    removeDefaultObjects()

    if (name !in this) {
        return create(name, type, configurer)
    }

    var num = 0
    while (true) {
        ++num
        val nameWithSuffix = "$name\$$num"
        if (nameWithSuffix !in this) {
            return create(nameWithSuffix, type, configurer)
        }
    }
}