diff --git a/common/src/main/java/org/implab/gradle/common/ProjectMixin.java b/common/src/main/java/org/implab/gradle/common/ProjectMixin.java --- a/common/src/main/java/org/implab/gradle/common/ProjectMixin.java +++ b/common/src/main/java/org/implab/gradle/common/ProjectMixin.java @@ -10,8 +10,8 @@ import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.Directory; import org.gradle.api.tasks.TaskContainer; +import org.gradle.api.tasks.TaskProvider; import org.implab.gradle.common.dsl.TaskGroup; -import org.implab.gradle.common.dsl.TaskSpec; import org.implab.gradle.common.dsl.TasksMixin; import org.implab.gradle.common.utils.ExtraProps; @@ -21,9 +21,8 @@ public interface ProjectMixin extends Ta Project getProject(); @Override - default TaskSpec task(String name, Class clazz) { - var provider = getProject().getTasks().register(name, clazz); - return new TaskSpec<>(provider); + default TaskProvider task(String name, Class clazz) { + return getProject().getTasks().register(name, clazz); } /** Creates a new task group */ diff --git a/common/src/main/java/org/implab/gradle/common/dsl/TaskGroup.java b/common/src/main/java/org/implab/gradle/common/dsl/TaskGroup.java --- a/common/src/main/java/org/implab/gradle/common/dsl/TaskGroup.java +++ b/common/src/main/java/org/implab/gradle/common/dsl/TaskGroup.java @@ -4,6 +4,7 @@ import java.util.Objects; import org.gradle.api.Task; import org.gradle.api.tasks.TaskContainer; +import org.gradle.api.tasks.TaskProvider; public abstract class TaskGroup implements TasksMixin { private final String groupName; @@ -16,10 +17,10 @@ public abstract class TaskGroup implemen } @Override - public TaskSpec task(String taskName, Class clazz) { + public TaskProvider task(String taskName, Class clazz) { var provider = tasks().register(taskName, clazz); provider.configure(t -> t.setGroup(groupName)); - return new TaskSpec<>(provider); + return provider; } } diff --git a/common/src/main/java/org/implab/gradle/common/dsl/TasksMixin.java b/common/src/main/java/org/implab/gradle/common/dsl/TasksMixin.java --- a/common/src/main/java/org/implab/gradle/common/dsl/TasksMixin.java +++ b/common/src/main/java/org/implab/gradle/common/dsl/TasksMixin.java @@ -1,12 +1,13 @@ package org.implab.gradle.common.dsl; import org.gradle.api.Task; +import org.gradle.api.tasks.TaskProvider; public interface TasksMixin { - default TaskSpec task(String name) { + default TaskProvider task(String name) { return task(name, Task.class); } - TaskSpec task(String name, Class clazz); + TaskProvider task(String name, Class clazz); } diff --git a/common/src/main/java/org/implab/gradle/common/utils/Closures.java b/common/src/main/java/org/implab/gradle/common/utils/Closures.java new file mode 100644 --- /dev/null +++ b/common/src/main/java/org/implab/gradle/common/utils/Closures.java @@ -0,0 +1,24 @@ +package org.implab.gradle.common.utils; + +import groovy.lang.Closure; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.gradle.api.Action; + +@NonNullByDefault +public final class Closures { + private Closures() { + } + + public static Action action(Closure closure) { + return arg -> { + closure.setDelegate(arg); + closure.call(arg); + }; + } + + public static void apply(Closure action, Object target) { + action.setDelegate(target); + action.call(target); + } +} diff --git a/common/src/main/java/org/implab/gradle/common/utils/ObjectsMixin.java b/common/src/main/java/org/implab/gradle/common/utils/ObjectsMixin.java --- a/common/src/main/java/org/implab/gradle/common/utils/ObjectsMixin.java +++ b/common/src/main/java/org/implab/gradle/common/utils/ObjectsMixin.java @@ -5,6 +5,7 @@ import java.util.function.Supplier; import javax.inject.Inject; import org.gradle.api.NamedDomainObjectContainer; +import org.gradle.api.NamedDomainObjectFactory; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.Provider; import org.gradle.api.provider.ProviderFactory; @@ -37,4 +38,8 @@ public interface ObjectsMixin { default NamedDomainObjectContainer newContainer(Class clazz) { return getObjects().domainObjectContainer(clazz); } + + default NamedDomainObjectContainer newContainer(Class clazz, NamedDomainObjectFactory factory) { + return getObjects().domainObjectContainer(clazz, factory); + } }