From 0f18c122cc1f8629b288480d63114ae8ea160981 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Sat, 12 Jun 2021 13:18:51 -0700 Subject: [PATCH] graveyard/api --- .../imagegrinder/ImageGrinderPlugin.java | 15 +++-- .../gradle/imagegrinder/ImageGrinderTask.java | 66 +++++-------------- .../imagegrinder/ImageGrinderTaskApi.java | 51 ++++++++++++++ .../com/diffplug/gradle/imagegrinder/Img.java | 4 +- 4 files changed, 80 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTaskApi.java diff --git a/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderPlugin.java b/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderPlugin.java index d0ab680..1d8546c 100644 --- a/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderPlugin.java +++ b/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderPlugin.java @@ -19,8 +19,8 @@ import org.gradle.api.NamedDomainObjectFactory; import org.gradle.api.Plugin; import org.gradle.api.Project; -import org.gradle.api.Task; import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.tasks.TaskProvider; /** See [README.md](https://github.com/diffplug/image-grinder) for usage instructions. */ public class ImageGrinderPlugin implements Plugin { @@ -29,13 +29,18 @@ public class ImageGrinderPlugin implements Plugin { @Override public void apply(Project project) { LegacyPlugin.applyForCompat(project, Legacy.class); - project.getExtensions().add(NAME, project.container(ImageGrinderTask.class, new NamedDomainObjectFactory() { + project.getExtensions().add(NAME, project.container(ImageGrinderTaskApi.class, new NamedDomainObjectFactory() { @Override - public ImageGrinderTask create(String name) { + public ImageGrinderTaskApi create(String name) { + ImageGrinderTaskApi. + project.getTasks().register(name, ImageGrinderTask.class, task -> { + + }); ImageGrinderTask task = project.getTasks().create(name, ImageGrinderTask.class); if (name.startsWith("process")) { - Task processResources = project.getTasks().getByName(JavaPlugin.PROCESS_RESOURCES_TASK_NAME); - processResources.dependsOn(task); + project.getTasks().named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, processResources -> { + processResources.dependsOn(provider); + }); } return task; } diff --git a/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTask.java b/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTask.java index 31630fe..6f02ee9 100644 --- a/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTask.java +++ b/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTask.java @@ -16,28 +16,21 @@ package com.diffplug.gradle.imagegrinder; -import com.diffplug.common.collect.HashMultimap; import java.io.File; -import java.io.Serializable; import java.util.Objects; -import java.util.Random; + import javax.inject.Inject; + import org.gradle.api.Action; import org.gradle.api.DefaultTask; -import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.FileType; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.CacheableTask; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputDirectory; -import org.gradle.api.tasks.OutputDirectory; -import org.gradle.api.tasks.PathSensitive; -import org.gradle.api.tasks.PathSensitivity; +import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.TaskAction; import org.gradle.work.ChangeType; import org.gradle.work.FileChange; -import org.gradle.work.Incremental; import org.gradle.work.InputChanges; import org.gradle.workers.WorkAction; import org.gradle.workers.WorkParameters; @@ -46,6 +39,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.diffplug.common.collect.HashMultimap; + /** * See [README.md](https://github.com/diffplug/image-grinder) for usage instructions. * @@ -69,7 +64,7 @@ * method. */ @CacheableTask -public abstract class ImageGrinderTask extends DefaultTask { +public class ImageGrinderTask extends DefaultTask { private final WorkerExecutor workerExecutor; @Inject @@ -77,46 +72,30 @@ public ImageGrinderTask(WorkerExecutor workerExecutor) { this.workerExecutor = workerExecutor; } - @Incremental - @PathSensitive(PathSensitivity.RELATIVE) - @InputDirectory - public abstract DirectoryProperty getSrcDir(); - - @OutputDirectory - public abstract DirectoryProperty getDstDir(); - - @Input - Serializable bumpThisNumberWhenTheGrinderChanges = new NeverUpToDateBetweenRuns(); - - static class NeverUpToDateBetweenRuns extends LazyForwardingEquality { - private static final long serialVersionUID = 1L; - private static final Random RANDOM = new Random(); + @Nested + ImageGrinderTaskApi api; - @Override - protected Integer calculateState() throws Exception { - return RANDOM.nextInt(); - } + public ImageGrinderTaskApi getApi() { + return api; } - Action> grinder; - - public void grinder(Action> grinder) { - this.grinder = grinder; + public void setApi(ImageGrinderTaskApi api) { + this.api = api; } @TaskAction public void performAction(InputChanges inputChanges) throws Exception { - Objects.requireNonNull(grinder, "grinder"); + Objects.requireNonNull(api.grinder, "grinder"); File cache = new File(getProject().getBuildDir(), "cache" + getName()); if (!inputChanges.isIncremental()) { - getProject().delete(getDstDir().getAsFile().get()); + getProject().delete(api.getDstDir().getAsFile().get()); map = HashMultimap.create(); } else { readFromCache(cache); } WorkQueue queue = workerExecutor.noIsolation(); - for (FileChange fileChange : inputChanges.getFileChanges(getSrcDir())) { + for (FileChange fileChange : inputChanges.getFileChanges(api.getSrcDir())) { if (fileChange.getFileType() == FileType.DIRECTORY) { continue; } @@ -174,7 +153,7 @@ public static abstract class RenderSvg implements WorkAction { public void execute() { File sourceFile = getParameters().getSourceFile().get().getAsFile(); ImageGrinderTask task = getParameters().getTaskRef().get().value(); - Subpath subpath = Subpath.from(task.getSrcDir().getAsFile().get(), sourceFile); + Subpath subpath = Subpath.from(task.api.getSrcDir().getAsFile().get(), sourceFile); Img img; switch (subpath.extension()) { case "svg": @@ -189,20 +168,9 @@ protected void renderPng(File file, Size size) throws Exception { default: throw new IllegalArgumentException("Can only handle svg, not " + subpath); } - task.grinder.execute(img); + task.api.grinder.execute(img); } } - ///////////////////////////////////// - // Autogenerated getters / setters // - ///////////////////////////////////// - public Serializable getBumpThisNumberWhenTheGrinderChanges() { - return bumpThisNumberWhenTheGrinderChanges; - } - - public void setBumpThisNumberWhenTheGrinderChanges(Serializable bumpThisNumberWhenTheGrinderChanges) { - this.bumpThisNumberWhenTheGrinderChanges = bumpThisNumberWhenTheGrinderChanges; - } - private static final Logger logger = LoggerFactory.getLogger(ImageGrinderTask.class); } diff --git a/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTaskApi.java b/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTaskApi.java new file mode 100644 index 0000000..b63c3d0 --- /dev/null +++ b/src/main/java/com/diffplug/gradle/imagegrinder/ImageGrinderTaskApi.java @@ -0,0 +1,51 @@ +package com.diffplug.gradle.imagegrinder; + +import java.io.Serializable; +import java.util.Random; + +import org.gradle.api.Action; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; +import org.gradle.work.Incremental; + +public abstract class ImageGrinderTaskApi { + @Incremental + @PathSensitive(PathSensitivity.RELATIVE) + @InputDirectory + public abstract DirectoryProperty getSrcDir(); + + @OutputDirectory + public abstract DirectoryProperty getDstDir(); + + Action> grinder; + + public void grinder(Action> grinder) { + this.grinder = grinder; + } + + // up-to-date checking on the uncheckable `Action> grinder` + @Input + Serializable bumpThisNumberWhenTheGrinderChanges = new NeverUpToDateBetweenRuns(); + + static class NeverUpToDateBetweenRuns extends LazyForwardingEquality { + private static final long serialVersionUID = 1L; + private static final Random RANDOM = new Random(); + + @Override + protected Integer calculateState() throws Exception { + return RANDOM.nextInt(); + } + } + + public Serializable getBumpThisNumberWhenTheGrinderChanges() { + return bumpThisNumberWhenTheGrinderChanges; + } + + public void setBumpThisNumberWhenTheGrinderChanges(Serializable bumpThisNumberWhenTheGrinderChanges) { + this.bumpThisNumberWhenTheGrinderChanges = bumpThisNumberWhenTheGrinderChanges; + } +} diff --git a/src/main/java/com/diffplug/gradle/imagegrinder/Img.java b/src/main/java/com/diffplug/gradle/imagegrinder/Img.java index 587326f..f5672a0 100644 --- a/src/main/java/com/diffplug/gradle/imagegrinder/Img.java +++ b/src/main/java/com/diffplug/gradle/imagegrinder/Img.java @@ -81,10 +81,10 @@ public void renderFull(String fullPath, Size size) { } File registerDstFile(String fullPath) { - File file = new File(task.getDstDir().getAsFile().get(), fullPath); + File file = new File(task.api.getDstDir().getAsFile().get(), fullPath); FileMisc.mkdirs(file.getParentFile()); synchronized (task.map) { - task.map.put(new File(task.getSrcDir().getAsFile().get(), subpath.full()), file); + task.map.put(new File(task.api.getSrcDir().getAsFile().get(), subpath.full()), file); } return file; }