Scripts/lom/src/main/kotlin/io/gitlab/jfronny/scripts/GradleExt.kt

29 lines
1.3 KiB
Kotlin

package io.gitlab.jfronny.scripts
import org.gradle.api.PolymorphicDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.tasks.TaskContainer
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.named
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
val TaskContainer.sourcesJar get() = named<Jar>("sourcesJar")
fun <T : Any, C : PolymorphicDomainObjectContainer<T>, U : T> C.registering(type: KClass<U>, action: U.() -> Unit): PDelegate<T, C, U> = PDelegate(this, type.java, action)
class PDelegate<T : Any, C : PolymorphicDomainObjectContainer<T>, U : T>(private val container: C, private val type: Class<U>, private val action: U.() -> Unit) {
operator fun provideDelegate(thisRef: Any?, property: KProperty<*>): SDelegate<U> = SDelegate(container.register(property.name, type, action).get())
}
class SDelegate<T>(private val delegate: T) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = delegate
}
fun Project.prop(name: String, default: String? = null): String =
if (default == null || hasProperty(name)) property(name).toString()
else default
fun DependencyHandler.devProject(path: String): Dependency = project(mapOf("path" to path, "configuration" to "dev"))