29 lines
1.3 KiB
Kotlin
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")) |