Add reporter DesugaredMethodsList
- Fix compatibility with BackportedMethodRewriter
Change-Id: Iaf4818f90d7fabffbd05ca210143d3fe3e721f92
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
index f263c2e..5d6e15c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
@@ -22,14 +22,7 @@
// If we increment this api level, we need to verify everything works correctly.
static final AndroidApiLevel MAX_TESTED_ANDROID_API_LEVEL = AndroidApiLevel.U;
- private final DexItemFactory factory = new DexItemFactory();
- private final Reporter reporter = new Reporter();
- final InternalOptions options =
- new InternalOptions(factory, reporter)
- .getArtProfileOptions()
- .setAllowReadingEmptyArtProfileProvidersMultipleTimesForTesting(true)
- .getOptions();
-
+ final InternalOptions options;
final DesugaredLibrarySpecification desugaredLibrarySpecification;
final StringResource desugaredLibrarySpecificationResource;
final Collection<ProgramResourceProvider> desugaredLibraryImplementation;
@@ -37,11 +30,13 @@
final Collection<ClassFileResourceProvider> androidJar;
AbstractGenerateFiles(
+ Reporter reporter,
StringResource desugaredLibrarySpecificationResource,
Collection<ProgramResourceProvider> desugarImplementation,
Path output,
Collection<ClassFileResourceProvider> androidJar) {
assert androidJar != null;
+ this.options = createOptions(reporter);
this.desugaredLibrarySpecificationResource = desugaredLibrarySpecificationResource;
this.androidJar = androidJar;
this.desugaredLibrarySpecification = readDesugaredLibrarySpecification();
@@ -49,14 +44,21 @@
this.output = output;
}
+ private InternalOptions createOptions(Reporter reporter) {
+ return new InternalOptions(new DexItemFactory(), reporter)
+ .getArtProfileOptions()
+ .setAllowReadingEmptyArtProfileProvidersMultipleTimesForTesting(true)
+ .getOptions();
+ }
+
private DesugaredLibrarySpecification readDesugaredLibrarySpecification() {
if (desugaredLibrarySpecificationResource == null) {
return MachineDesugaredLibrarySpecification.empty();
}
return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
desugaredLibrarySpecificationResource,
- factory,
- reporter,
+ options.dexItemFactory(),
+ options.reporter,
false,
AndroidApiLevel.B.getLevel());
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
index c2261d4..169dcfe 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
@@ -9,38 +9,43 @@
import com.android.tools.r8.ArchiveClassFileProvider;
import com.android.tools.r8.ArchiveProgramResourceProvider;
import com.android.tools.r8.ClassFileResourceProvider;
+import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.Keep;
import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.StringConsumer;
import com.android.tools.r8.StringResource;
import com.android.tools.r8.Version;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.ExceptionUtils;
+import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.ThreadUtils;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.List;
+import java.util.concurrent.ExecutorService;
@Keep
public class DesugaredMethodsList extends GenerateDesugaredLibraryLintFiles {
private final AndroidApiLevel minApi;
-
private final StringConsumer outputConsumer;
DesugaredMethodsList(
int minApi,
+ Reporter reporter,
StringResource desugarConfiguration,
Collection<ProgramResourceProvider> desugarImplementation,
StringConsumer outputConsumer,
Collection<ClassFileResourceProvider> androidJar) {
- super(desugarConfiguration, desugarImplementation, null, androidJar);
+ super(reporter, desugarConfiguration, desugarImplementation, null, androidJar);
this.minApi = AndroidApiLevel.getAndroidApiLevel(minApi);
this.outputConsumer = outputConsumer;
}
- public static void run(DesugaredMethodsListCommand command) throws IOException {
+ public static void run(DesugaredMethodsListCommand command) throws CompilationFailedException {
if (command.isHelp()) {
System.out.println(DesugaredMethodsListCommand.getUsageMessage());
return;
@@ -49,13 +54,23 @@
System.out.println("DesugaredMethodsList " + Version.getVersionString());
return;
}
- new DesugaredMethodsList(
- command.getMinApi(),
- command.getDesugarLibrarySpecification(),
- command.getDesugarLibraryImplementation(),
- command.getOutputConsumer(),
- command.getLibrary())
- .run();
+ ExecutorService executorService = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
+ try {
+ ExceptionUtils.withD8CompilationHandler(
+ command.getReporter(),
+ () -> {
+ new DesugaredMethodsList(
+ command.getMinApi(),
+ command.getReporter(),
+ command.getDesugarLibrarySpecification(),
+ command.getDesugarLibraryImplementation(),
+ command.getOutputConsumer(),
+ command.getLibrary())
+ .run();
+ });
+ } finally {
+ executorService.shutdown();
+ }
}
@Override
@@ -100,7 +115,7 @@
public static void main(String[] args) throws Exception {
if (args.length == 4 || args.length == 5) {
DesugaredMethodsListCommand.Builder builder =
- DesugaredMethodsListCommand.builder()
+ DesugaredMethodsListCommand.builder(new Reporter())
.setMinApi(parseInt(args[0]))
.setDesugarLibrarySpecification(getSpecificationArg(args[1]))
.setOutputPath(Paths.get(args[3]));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
index 924a0e6..726d445 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
@@ -15,9 +15,8 @@
import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.StringConsumer;
import com.android.tools.r8.StringResource;
-import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
@@ -33,6 +32,8 @@
private final boolean help;
private final boolean version;
private final int minApi;
+
+ private final Reporter reporter;
private final StringResource desugarLibrarySpecification;
private final Collection<ProgramResourceProvider> desugarLibraryImplementation;
private final StringConsumer outputConsumer;
@@ -40,6 +41,7 @@
DesugaredMethodsListCommand(
int minApi,
+ Reporter reporter,
StringResource desugarLibrarySpecification,
Collection<ProgramResourceProvider> desugarLibraryImplementation,
StringConsumer outputConsumer,
@@ -47,6 +49,7 @@
this.help = false;
this.version = false;
this.minApi = minApi;
+ this.reporter = reporter;
this.desugarLibrarySpecification = desugarLibrarySpecification;
this.desugarLibraryImplementation = desugarLibraryImplementation;
this.outputConsumer = outputConsumer;
@@ -57,6 +60,7 @@
this.help = help;
this.version = version;
this.minApi = -1;
+ this.reporter = null;
this.desugarLibrarySpecification = null;
this.desugarLibraryImplementation = null;
this.outputConsumer = null;
@@ -100,14 +104,19 @@
return builder.toString();
}
- public static Builder builder() {
- return new Builder();
+ public Reporter getReporter() {
+ return reporter;
+ }
+
+ public static Builder builder(DiagnosticsHandler diagnosticsHandler) {
+ return new Builder(diagnosticsHandler);
}
@Keep
public static class Builder {
private int minApi = AndroidApiLevel.B.getLevel();
+ private final Reporter reporter;
private StringResource desugarLibrarySpecification = null;
private Collection<ProgramResourceProvider> desugarLibraryImplementation = new ArrayList<>();
private StringConsumer outputConsumer;
@@ -116,6 +125,10 @@
private boolean help = false;
private boolean version = false;
+ public Builder(DiagnosticsHandler diagnosticsHandler) {
+ this.reporter = new Reporter(diagnosticsHandler);
+ }
+
public Builder setMinApi(int minApi) {
this.minApi = minApi;
return this;
@@ -173,11 +186,11 @@
}
if (desugarLibrarySpecification != null && library.isEmpty()) {
- throw new CompilationError("With desugared library configuration a library is required");
+ reporter.error("With desugared library configuration a library is required");
}
if (!desugarLibraryImplementation.isEmpty() && desugarLibrarySpecification == null) {
- throw new CompilationError(
+ reporter.error(
"desugarLibrarySpecification is required when desugared library implementation is"
+ " present.");
}
@@ -196,6 +209,7 @@
}
return new DesugaredMethodsListCommand(
minApi,
+ reporter,
desugarLibrarySpecification,
desugarLibraryImplementation,
outputConsumer,
@@ -219,8 +233,9 @@
.build();
}
- public DesugaredMethodsListCommand parse(String[] args, Origin origin) throws IOException {
- DesugaredMethodsListCommand.Builder builder = DesugaredMethodsListCommand.builder();
+ public DesugaredMethodsListCommand parse(String[] args, DiagnosticsHandler handler)
+ throws IOException {
+ DesugaredMethodsListCommand.Builder builder = DesugaredMethodsListCommand.builder(handler);
for (int i = 0; i < args.length; i += 2) {
String arg = args[i].trim();
if (arg.length() == 0) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java
index 49d979b..47d7b9f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateDesugaredLibraryLintFiles.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.collect.ImmutableList;
import java.io.File;
@@ -32,11 +33,12 @@
private static final boolean FORMAT_WITH_FIELD = true;
public GenerateDesugaredLibraryLintFiles(
+ Reporter reporter,
StringResource desugarConfiguration,
Collection<ProgramResourceProvider> desugarImplementation,
Path output,
Collection<ClassFileResourceProvider> androidJar) {
- super(desugarConfiguration, desugarImplementation, output, androidJar);
+ super(reporter, desugarConfiguration, desugarImplementation, output, androidJar);
}
private String lintBaseFileName(
@@ -175,6 +177,7 @@
public static void main(String[] args) throws Exception {
if (args.length == 4) {
new GenerateDesugaredLibraryLintFiles(
+ new Reporter(),
StringResource.fromFile(Paths.get(args[0])),
ImmutableList.of(ArchiveProgramResourceProvider.fromArchive(Paths.get(args[1]))),
Paths.get(args[2]),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
index 4bc0821..d1394058 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
@@ -23,6 +23,7 @@
import com.android.tools.r8.ir.desugar.desugaredlibrary.lint.SupportedClasses.SupportedClass;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.collect.ImmutableList;
import java.io.PrintStream;
@@ -50,7 +51,7 @@
Collection<ProgramResourceProvider> desugarImplementation,
Path outputDirectory,
Collection<ClassFileResourceProvider> androidJar) {
- super(desugarSpecification, desugarImplementation, outputDirectory, androidJar);
+ super(new Reporter(), desugarSpecification, desugarImplementation, outputDirectory, androidJar);
}
private static class StringBuilderWithIndent {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
index e07b779..106486b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
@@ -259,6 +259,7 @@
Path lint = top.resolve("lint_" + spec);
Files.createDirectories(lint);
new GenerateDesugaredLibraryLintFiles(
+ new Reporter(),
StringResource.fromFile(spec.getSpecification()),
ImmutableList.of(ArchiveProgramResourceProvider.fromArchive(jdkLibJar)),
lint,