Update gradle custom tasks to use worker api
This is necessary if upgrading to a new version of gradle since "submit" has been removed.
Bug: b/270105162
Change-Id: Id40e7c45417f3dedac0e637f77f2d792c5a21bda
diff --git a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java b/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java
index bae3c1c..1a09676 100644
--- a/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java
+++ b/buildSrc/src/main/java/desugaredlibrary/CustomConversionAsmRewriterTask.java
@@ -9,10 +9,12 @@
import java.io.UncheckedIOException;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
+import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.IsolationMode;
+import org.gradle.workers.WorkAction;
+import org.gradle.workers.WorkParameters;
import org.gradle.workers.WorkerExecutor;
public class CustomConversionAsmRewriterTask extends DefaultTask {
@@ -47,29 +49,31 @@
@TaskAction
void exec() {
- workerExecutor.submit(
- Run.class,
- config -> {
- config.setIsolationMode(IsolationMode.NONE);
- config.params(rawJar, outputDirectory);
- });
+ workerExecutor
+ .noIsolation()
+ .submit(
+ Run.class,
+ parameters -> {
+ parameters.getRawJar().set(rawJar);
+ parameters.getOutputDirectory().set(outputDirectory);
+ });
}
- public static class Run implements Runnable {
+ public interface RunParameters extends WorkParameters {
+ RegularFileProperty getRawJar();
- private final File rawJar;
- private final File outputDirectory;
+ RegularFileProperty getOutputDirectory();
+ }
- @Inject
- public Run(File rawJar, File outputDirectory) {
- this.rawJar = rawJar;
- this.outputDirectory = outputDirectory;
- }
+ public abstract static class Run implements WorkAction<RunParameters> {
@Override
- public void run() {
+ public void execute() {
try {
- CustomConversionAsmRewriter.generateJars(rawJar.toPath(), outputDirectory.toPath());
+ RunParameters parameters = getParameters();
+ CustomConversionAsmRewriter.generateJars(
+ parameters.getRawJar().getAsFile().get().toPath(),
+ parameters.getOutputDirectory().getAsFile().get().toPath());
} catch (IOException e) {
throw new UncheckedIOException(e);
}
diff --git a/buildSrc/src/main/java/dx/DexMergerTask.java b/buildSrc/src/main/java/dx/DexMergerTask.java
index 5dea52b..aa3d66d 100644
--- a/buildSrc/src/main/java/dx/DexMergerTask.java
+++ b/buildSrc/src/main/java/dx/DexMergerTask.java
@@ -8,15 +8,19 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.FileCollection;
+import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.provider.SetProperty;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.IsolationMode;
+import org.gradle.process.JavaForkOptions;
+import org.gradle.workers.WorkAction;
+import org.gradle.workers.WorkParameters;
+import org.gradle.workers.WorkQueue;
import org.gradle.workers.WorkerExecutor;
import utils.Utils;
@@ -63,45 +67,49 @@
@TaskAction
void exec() {
- workerExecutor.submit(
+ WorkQueue workQueue =
+ workerExecutor.processIsolation(
+ workerSpec -> {
+ JavaForkOptions forkOptions = workerSpec.getForkOptions();
+ if (!dexMergerExecutable.isPresent()) {
+ setDexMergerExecutable(
+ forkOptions
+ .getWorkingDir()
+ .toPath()
+ .resolve(Utils.dexMergerExecutable())
+ .toFile());
+ }
+ });
+ workQueue.submit(
RunDexMerger.class,
- config -> {
- File executable =
- dexMergerExecutable.isPresent()
- ? dexMergerExecutable.get()
- : config
- .getForkOptions()
- .getWorkingDir()
- .toPath()
- .resolve(Utils.dexMergerExecutable())
- .toFile();
- config.setIsolationMode(IsolationMode.NONE);
- config.params(source.getFiles(), destination, executable);
+ parameters -> {
+ parameters.getSources().set(source.getFiles());
+ parameters.getDestination().set(destination);
+ parameters.getDexMergerExecutable().set(dexMergerExecutable.get());
});
}
- public static class RunDexMerger implements Runnable {
- private final Set<File> sources;
- private final File destination;
- private final File dexMergerExecutable;
+ public interface RunDexMergerParameters extends WorkParameters {
- @Inject
- public RunDexMerger(Set<File> sources, File destination, File dexMergerExecutable) {
- this.sources = sources;
- this.destination = destination;
- this.dexMergerExecutable = dexMergerExecutable;
- }
+ SetProperty<File> getSources();
+
+ RegularFileProperty getDestination();
+
+ RegularFileProperty getDexMergerExecutable();
+ }
+
+ public abstract static class RunDexMerger implements WorkAction<RunDexMergerParameters> {
@Override
- public void run() {
+ public void execute() {
try {
+ RunDexMergerParameters parameters = getParameters();
List<String> command = new ArrayList<>();
- command.add(dexMergerExecutable.getCanonicalPath());
- command.add(destination.getCanonicalPath());
- for (File source : sources) {
+ command.add(parameters.getDexMergerExecutable().getAsFile().get().getCanonicalPath());
+ command.add(parameters.getDestination().getAsFile().get().getCanonicalPath());
+ for (File source : parameters.getSources().get()) {
command.add(source.getCanonicalPath());
}
-
Process dexMerger = new ProcessBuilder(command).inheritIO().start();
int exitCode = dexMerger.waitFor();
if (exitCode != 0) {
diff --git a/buildSrc/src/main/java/dx/DxTask.java b/buildSrc/src/main/java/dx/DxTask.java
index e05e8fb..db9f44d 100644
--- a/buildSrc/src/main/java/dx/DxTask.java
+++ b/buildSrc/src/main/java/dx/DxTask.java
@@ -9,16 +9,21 @@
import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.FileCollection;
+import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.provider.Property;
+import org.gradle.api.provider.SetProperty;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.IsolationMode;
+import org.gradle.process.JavaForkOptions;
+import org.gradle.workers.WorkAction;
+import org.gradle.workers.WorkParameters;
+import org.gradle.workers.WorkQueue;
import org.gradle.workers.WorkerExecutor;
import utils.Utils;
@@ -75,49 +80,51 @@
@TaskAction
void exec() {
- workerExecutor.submit(
+ WorkQueue workQueue =
+ workerExecutor.processIsolation(
+ workerSpec -> {
+ JavaForkOptions forkOptions = workerSpec.getForkOptions();
+ if (!dxExecutable.isPresent()) {
+ setDxExecutable(
+ forkOptions.getWorkingDir().toPath().resolve(Utils.dxExecutable()).toFile());
+ }
+ });
+ workQueue.submit(
RunDx.class,
- config -> {
- File executable =
- dxExecutable.isPresent()
- ? dxExecutable.get()
- : config
- .getForkOptions()
- .getWorkingDir()
- .toPath()
- .resolve(Utils.dxExecutable())
- .toFile();
- config.setIsolationMode(IsolationMode.NONE);
- config.params(source.getFiles(), destination, executable, debug);
+ parameters -> {
+ parameters.getSources().set(source.getFiles());
+ parameters.getDestination().set(destination);
+ parameters.getDxExecutable().set(dxExecutable.get());
+ parameters.getDebug().set(debug);
});
}
- public static class RunDx implements Runnable {
- private final Set<File> sources;
- private final File destination;
- private final File dxExecutable;
- private final boolean debug;
+ public interface RunDxParameters extends WorkParameters {
- @Inject
- public RunDx(Set<File> sources, File destination, File dxExecutable, boolean debug) {
- this.sources = sources;
- this.destination = destination;
- this.dxExecutable = dxExecutable;
- this.debug = debug;
- }
+ SetProperty<File> getSources();
+
+ RegularFileProperty getDestination();
+
+ RegularFileProperty getDxExecutable();
+
+ Property<Boolean> getDebug();
+ }
+
+ public abstract static class RunDx implements WorkAction<RunDxParameters> {
@Override
- public void run() {
+ public void execute() {
+ RunDxParameters parameters = getParameters();
try {
List<String> command = new ArrayList<>();
- command.add(dxExecutable.getCanonicalPath());
+ command.add(parameters.getDxExecutable().getAsFile().get().getCanonicalPath());
command.add("--dex");
command.add("--output");
- command.add(destination.getCanonicalPath());
- if (debug) {
+ command.add(parameters.getDestination().getAsFile().get().getCanonicalPath());
+ if (parameters.getDebug().get()) {
command.add("--debug");
}
- for (File source : sources) {
+ for (File source : parameters.getSources().get()) {
command.add(source.getCanonicalPath());
}
diff --git a/buildSrc/src/main/java/smali/SmaliTask.java b/buildSrc/src/main/java/smali/SmaliTask.java
index 845592e..dd4e10c 100644
--- a/buildSrc/src/main/java/smali/SmaliTask.java
+++ b/buildSrc/src/main/java/smali/SmaliTask.java
@@ -9,14 +9,16 @@
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.List;
-import java.util.Set;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.FileTree;
+import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.provider.SetProperty;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.IsolationMode;
+import org.gradle.workers.WorkAction;
+import org.gradle.workers.WorkParameters;
import org.gradle.workers.WorkerExecutor;
import org.jf.smali.Smali;
import org.jf.smali.SmaliOptions;
@@ -53,28 +55,33 @@
@TaskAction
void exec() {
- workerExecutor.submit(RunSmali.class, config -> {
- config.setIsolationMode(IsolationMode.NONE);
- config.params(source.getFiles(), destination);
- });
+ workerExecutor
+ .noIsolation()
+ .submit(
+ RunSmali.class,
+ parameters -> {
+ parameters.getSources().set(source.getFiles());
+ parameters.getDestination().set(destination);
+ });
}
- public static class RunSmali implements Runnable {
- private final Set<File> sources;
- private final File destination;
+ public interface RunSmaliParameters extends WorkParameters {
- @Inject
- public RunSmali(Set<File> sources, File destination) {
- this.sources = sources;
- this.destination = destination;
- }
+ SetProperty<File> getSources();
+
+ RegularFileProperty getDestination();
+ }
+
+ public abstract static class RunSmali implements WorkAction<RunSmaliParameters> {
@Override
- public void run() {
+ public void execute() {
try {
- List<String> fileNames = sources.stream().map(File::toString).collect(toList());
+ RunSmaliParameters parameters = getParameters();
+ List<String> fileNames =
+ parameters.getSources().get().stream().map(File::toString).collect(toList());
SmaliOptions options = new SmaliOptions();
- options.outputDexFile = destination.getCanonicalPath();
+ options.outputDexFile = parameters.getDestination().getAsFile().get().getCanonicalPath();
Smali.assemble(options, fileNames);
} catch (IOException e) {
throw new UncheckedIOException(e);
diff --git a/buildSrc/src/main/java/tasks/DownloadDependency.java b/buildSrc/src/main/java/tasks/DownloadDependency.java
index 59596a8..6d7a75c 100644
--- a/buildSrc/src/main/java/tasks/DownloadDependency.java
+++ b/buildSrc/src/main/java/tasks/DownloadDependency.java
@@ -15,11 +15,14 @@
import java.util.stream.Collectors;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
+import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.provider.Property;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.gradle.internal.os.OperatingSystem;
-import org.gradle.workers.IsolationMode;
+import org.gradle.workers.WorkAction;
+import org.gradle.workers.WorkParameters;
import org.gradle.workers.WorkerExecutor;
public class DownloadDependency extends DefaultTask {
@@ -88,29 +91,34 @@
if (outputDir.exists() && outputDir.isDirectory()) {
outputDir.delete();
}
- workerExecutor.submit(RunDownload.class, config -> {
- config.setIsolationMode(IsolationMode.NONE);
- config.params(type, sha1File);
- });
+ workerExecutor
+ .noIsolation()
+ .submit(
+ RunDownload.class,
+ parameters -> {
+ parameters.getType().set(type);
+ parameters.getSha1File().set(sha1File);
+ });
}
- public static class RunDownload implements Runnable {
- private final Type type;
- private final File sha1File;
+ public interface RunDownloadParameters extends WorkParameters {
+ Property<Type> getType();
- @Inject
- public RunDownload(Type type, File sha1File) {
- this.type = type;
- this.sha1File = sha1File;
- }
+ RegularFileProperty getSha1File();
+ }
+
+ public abstract static class RunDownload implements WorkAction<RunDownloadParameters> {
@Override
- public void run() {
+ public void execute() {
try {
+ RunDownloadParameters parameters = getParameters();
+ Type type = parameters.getType().get();
+ File sha1File = parameters.getSha1File().getAsFile().get();
if (type == Type.GOOGLE_STORAGE) {
- downloadFromGoogleStorage();
+ downloadFromGoogleStorage(sha1File);
} else if (type == Type.X20) {
- downloadFromX20();
+ downloadFromX20(sha1File);
} else {
throw new RuntimeException("Unexpected or missing dependency type: " + type);
}
@@ -119,7 +127,7 @@
}
}
- private void downloadFromGoogleStorage() throws IOException, InterruptedException {
+ private void downloadFromGoogleStorage(File sha1File) throws IOException, InterruptedException {
List<String> args = Arrays.asList("-n", "-b", "r8-deps", "-s", "-u", sha1File.toString());
if (OperatingSystem.current().isWindows()) {
List<String> command = new ArrayList<>();
@@ -133,7 +141,7 @@
}
}
- private void downloadFromX20() throws IOException, InterruptedException {
+ private void downloadFromX20(File sha1File) throws IOException, InterruptedException {
if (OperatingSystem.current().isWindows()) {
throw new RuntimeException("Downloading from x20 unsupported on windows");
}