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

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

There is a newer version: 1.9.2
Show newest version
package name.remal.gradle_plugins.dsl.extensions

import name.remal.findMethod
import org.gradle.api.Action
import org.gradle.api.Task
import org.gradle.api.tasks.TaskContainer
import java.lang.reflect.Method

private val registerMethodNames = listOf("register", "createLater", "create")
private fun findRegisterMethod(vararg parameterTypes: Class<*>): Method {
    val declaringClass = TaskContainer::class.java
    registerMethodNames.forEach { methodName ->
        val method = declaringClass.findMethod(methodName, *parameterTypes) ?: return@forEach
        method.isAccessible = true
        return method
    }
    throw IllegalStateException("${declaringClass.name} doesn't have a public method of name ${registerMethodNames.joinToString("/")} and parameter types ${parameterTypes.joinToString(", ", transform = { it.name })}")
}

private val registerStringMethod: Method by lazy { findRegisterMethod(String::class.java) }
fun TaskContainer.registerCompatible(name: String) {
    registerStringMethod.invoke(this, name)
}

private val registerStringClassMethod: Method by lazy { findRegisterMethod(String::class.java, Class::class.java) }
fun  TaskContainer.registerCompatible(name: String, type: Class) {
    registerStringClassMethod.invoke(this, name, type)
}

private val registerStringActionMethod: Method by lazy { findRegisterMethod(String::class.java, Action::class.java) }
fun TaskContainer.registerCompatible(name: String, configurer: (task: Task) -> Unit) {
    registerStringActionMethod.invoke(this, name, Action { configurer(it) })
}

private val registerStringClassActionMethod: Method by lazy { findRegisterMethod(String::class.java, Class::class.java, Action::class.java) }
fun  TaskContainer.registerCompatible(name: String, type: Class, configurer: (task: T) -> Unit) {
    registerStringClassActionMethod.invoke(this, name, type, Action { configurer(it) })
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy