[GlobalSynthetics] Remove unwanted exposed apis
Bug: b/280016114
Change-Id: Iad29c5f5a66895abb48c350adaec12af598c5ed8
diff --git a/src/main/java/com/android/tools/r8/BaseCommand.java b/src/main/java/com/android/tools/r8/BaseCommand.java
index 893bc64..dd6a740 100644
--- a/src/main/java/com/android/tools/r8/BaseCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCommand.java
@@ -89,7 +89,7 @@
}
}
- private static class LibraryInputOrigin extends InputFileOrigin {
+ static class LibraryInputOrigin extends InputFileOrigin {
public LibraryInputOrigin(Path file) {
super("library input", file);
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
index 2efea81..559e3be 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
@@ -51,6 +51,7 @@
ExceptionUtils.withD8CompilationHandler(
options.reporter,
() -> {
+ // TODO(b/280016114): Implement
throw new RuntimeException("Implement GlobalSyntheticsGenerator");
});
} finally {
@@ -67,7 +68,7 @@
return;
}
if (command.isPrintVersion()) {
- System.out.println("GlobalSynthetics " + Version.getVersionString());
+ System.out.println("GlobalSyntheticsGenerator " + Version.getVersionString());
return;
}
run(command);
@@ -77,7 +78,7 @@
* Command-line entry to GlobalSynthetics.
*
* <p>See {@link GlobalSyntheticsGeneratorCommandParser#getUsageMessage()} or run {@code
- * globalsynthetics --help} for usage information.
+ * globalsyntheticsgenerator --help} for usage information.
*/
public static void main(String[] args) {
if (args.length == 0) {
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java
index 2187b67..7805226 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java
@@ -3,53 +3,72 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
+import com.android.tools.r8.BaseCommand.LibraryInputOrigin;
+import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.DexFileOverflowDiagnostic;
-import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.AbortException;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.ExceptionDiagnostic;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringDiagnostic;
import java.nio.file.Path;
+import java.util.Arrays;
import java.util.Collection;
/**
* Immutable command structure for an invocation of the {@link GlobalSyntheticsGenerator} compiler.
*/
-public final class GlobalSyntheticsGeneratorCommand extends BaseCommand {
+public final class GlobalSyntheticsGeneratorCommand {
private final ProgramConsumer programConsumer;
- private final StringConsumer classNameConsumer;
private final Reporter reporter;
private final int minApiLevel;
+ private final boolean printHelp;
+ private final boolean printVersion;
+
+ private final AndroidApp inputApp;
+
private final DexItemFactory factory = new DexItemFactory();
private GlobalSyntheticsGeneratorCommand(
- AndroidApp androidApp,
- ProgramConsumer programConsumer,
- StringConsumer ClassNameConsumer,
- Reporter reporter,
- int minApiLevel) {
- super(androidApp);
+ AndroidApp inputApp, ProgramConsumer programConsumer, Reporter reporter, int minApiLevel) {
+ this.inputApp = inputApp;
this.programConsumer = programConsumer;
- this.classNameConsumer = ClassNameConsumer;
this.minApiLevel = minApiLevel;
this.reporter = reporter;
+ this.printHelp = false;
+ this.printVersion = false;
}
private GlobalSyntheticsGeneratorCommand(boolean printHelp, boolean printVersion) {
- super(printHelp, printVersion);
+ this.printHelp = printHelp;
+ this.printVersion = printVersion;
+
+ this.inputApp = null;
this.programConsumer = null;
- this.classNameConsumer = null;
this.minApiLevel = AndroidApiLevel.B.getLevel();
reporter = new Reporter();
}
+ public AndroidApp getInputApp() {
+ return inputApp;
+ }
+
+ public boolean isPrintHelp() {
+ return printHelp;
+ }
+
+ public boolean isPrintVersion() {
+ return printVersion;
+ }
+
/**
* Parse the GlobalSyntheticsGenerator command-line.
*
@@ -102,7 +121,6 @@
return new Builder(diagnosticsHandler);
}
- @Override
InternalOptions getInternalOptions() {
InternalOptions internal = new InternalOptions(factory, reporter);
assert !internal.debug;
@@ -125,13 +143,14 @@
*
* <p>A builder is obtained by calling {@link GlobalSyntheticsGeneratorCommand#builder}.
*/
- public static class Builder
- extends BaseCommand.Builder<GlobalSyntheticsGeneratorCommand, Builder> {
+ public static class Builder {
private ProgramConsumer programConsumer = null;
- private StringConsumer globalSyntheticClassesListConsumer = null;
- private Reporter reporter;
+ private final Reporter reporter;
private int minApiLevel = AndroidApiLevel.B.getLevel();
+ private boolean printHelp = false;
+ private boolean printVersion = false;
+ private final AndroidApp.Builder appBuilder = AndroidApp.builder();
private Builder() {
this(new DefaultR8DiagnosticsHandler());
@@ -141,55 +160,46 @@
this.reporter = new Reporter(diagnosticsHandler);
}
- @Override
- Builder self() {
+ /** Set the min api level. */
+ public Builder setMinApiLevel(int minApiLevel) {
+ this.minApiLevel = minApiLevel;
return this;
}
- public Builder setReporter(Reporter reporter) {
- this.reporter = reporter;
- return self();
+ /** Set the value of the print-help flag. */
+ public Builder setPrintHelp(boolean printHelp) {
+ this.printHelp = printHelp;
+ return this;
}
- public Builder setMinApiLevel(int minApiLevel) {
- this.minApiLevel = minApiLevel;
- return self();
+ /** Set the value of the print-version flag. */
+ public Builder setPrintVersion(boolean printVersion) {
+ this.printVersion = printVersion;
+ return this;
}
- @Override
- void validate() {
- if (isPrintHelp() || isPrintVersion()) {
- return;
- }
- if (!(programConsumer instanceof DexIndexedConsumer)) {
- reporter.error("G8 does not support compiling to dex per class or class files");
- }
+ /** Add library file resources. */
+ public Builder addLibraryFiles(Path... files) {
+ addLibraryFiles(Arrays.asList(files));
+ return this;
}
- @Override
- public GlobalSyntheticsGeneratorCommand makeCommand() {
- if (isPrintHelp() || isPrintVersion()) {
- return new GlobalSyntheticsGeneratorCommand(isPrintHelp(), isPrintVersion());
- }
- validate();
- return new GlobalSyntheticsGeneratorCommand(
- getAppBuilder().build(),
- programConsumer,
- globalSyntheticClassesListConsumer,
- reporter,
- minApiLevel);
+ /** Add library file resources. */
+ public Builder addLibraryFiles(Collection<Path> files) {
+ guard(
+ () -> {
+ for (Path path : files) {
+ try {
+ appBuilder.addLibraryFile(path);
+ } catch (CompilationError e) {
+ error(new LibraryInputOrigin(path), e);
+ }
+ }
+ });
+ return this;
}
- public Builder setGlobalSyntheticClassesListOutput(Path path) {
- return setGlobalSyntheticClassesListConsumer(new StringConsumer.FileConsumer(path));
- }
-
- public Builder setGlobalSyntheticClassesListConsumer(
- StringConsumer globalSyntheticClassesListOutput) {
- this.globalSyntheticClassesListConsumer = globalSyntheticClassesListOutput;
- return self();
- }
-
+ /** Set an output path to consume the resulting program. */
public Builder setProgramConsumerOutput(Path path) {
return setProgramConsumer(
FileUtils.isArchive(path)
@@ -197,64 +207,53 @@
: new DexIndexedConsumer.DirectoryConsumer(path, false));
}
+ /** Set a consumer for obtaining the resulting program. */
public Builder setProgramConsumer(ProgramConsumer programConsumer) {
this.programConsumer = programConsumer;
- return self();
+ return this;
}
- @Override
- public Builder addProgramFiles(Collection<Path> files) {
- throw new Unreachable("Should not be used for global synthetics generation");
+ public GlobalSyntheticsGeneratorCommand build() {
+ validate();
+ if (isPrintHelpOrPrintVersion()) {
+ return new GlobalSyntheticsGeneratorCommand(printHelp, printVersion);
+ }
+ return new GlobalSyntheticsGeneratorCommand(
+ appBuilder.build(), programConsumer, reporter, minApiLevel);
}
- @Override
- public Builder addProgramResourceProvider(ProgramResourceProvider programProvider) {
- throw new Unreachable("Should not be used for global synthetics generation");
+ private boolean isPrintHelpOrPrintVersion() {
+ return printHelp || printVersion;
}
- @Override
- public Builder addClasspathFiles(Path... files) {
- throw new Unreachable("Should not be used for global synthetics generation");
+ private void validate() {
+ if (isPrintHelpOrPrintVersion()) {
+ return;
+ }
+ if (!(programConsumer instanceof DexIndexedConsumer)) {
+ reporter.error("G8 does not support compiling to dex per class or class files");
+ }
}
- @Override
- public Builder addClasspathFiles(Collection<Path> files) {
- throw new Unreachable("Should not be used for global synthetics generation");
+ // Helper to guard and handle exceptions.
+ private void guard(Runnable action) {
+ try {
+ action.run();
+ } catch (CompilationError e) {
+ reporter.error(e.toStringDiagnostic());
+ } catch (AbortException e) {
+ // Error was reported and exception will be thrown by build.
+ }
}
- @Override
- public Builder addClasspathResourceProvider(ClassFileResourceProvider provider) {
- throw new Unreachable("Should not be used for global synthetics generation");
+ /** Signal an error. */
+ public void error(Diagnostic diagnostic) {
+ reporter.error(diagnostic);
}
- @Override
- public Builder addClassProgramData(byte[] data, Origin origin) {
- throw new Unreachable("Should not be used for global synthetics generation");
- }
-
- @Override
- Builder addDexProgramData(byte[] data, Origin origin) {
- throw new Unreachable("Should not be used for global synthetics generation");
- }
-
- @Override
- public Builder addMainDexListFiles(Path... files) {
- throw new Unreachable("Should not be used for global synthetics generation");
- }
-
- @Override
- public Builder addMainDexListFiles(Collection<Path> files) {
- throw new Unreachable("Should not be used for global synthetics generation");
- }
-
- @Override
- public Builder addMainDexClasses(String... classes) {
- throw new Unreachable("Should not be used for global synthetics generation");
- }
-
- @Override
- public Builder addMainDexClasses(Collection<String> classes) {
- throw new Unreachable("Should not be used for global synthetics generation");
+ // Helper to signify an error.
+ public void error(Origin origin, Throwable throwable) {
+ reporter.error(new ExceptionDiagnostic(throwable, origin));
}
}
}
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommandParser.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommandParser.java
index 36e5bbd..9022e28 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommandParser.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommandParser.java
@@ -19,7 +19,7 @@
public class GlobalSyntheticsGeneratorCommandParser {
- private static final String LOWER_CASE_NAME = "globalsynthetics";
+ private static final String LOWER_CASE_NAME = "globalsyntheticsgenerator";
private static final String MIN_API_FLAG = "--min-api";
private static final String USAGE_MESSAGE =
@@ -30,9 +30,6 @@
.add(ParseFlagInfoImpl.getMinApi())
.add(ParseFlagInfoImpl.getLib())
.add(ParseFlagInfoImpl.flag1("--output", "<dex-file>", "Output result in <dex-file>."))
- .add(
- ParseFlagInfoImpl.flag1(
- "--classes-list-output", "<file>", "Output list of generated classes in <file>"))
.add(ParseFlagInfoImpl.getVersion(LOWER_CASE_NAME))
.add(ParseFlagInfoImpl.getHelp())
.build();
@@ -46,7 +43,7 @@
}
private static final Set<String> OPTIONS_WITH_ONE_PARAMETER =
- ImmutableSet.of("--output", "--lib", MIN_API_FLAG, "---classes-list-output");
+ ImmutableSet.of("--output", "--lib", MIN_API_FLAG);
public static GlobalSyntheticsGeneratorCommand.Builder parse(String[] args, Origin origin) {
return new GlobalSyntheticsGeneratorCommandParser()
@@ -101,8 +98,6 @@
}
} else if (arg.equals("--lib")) {
builder.addLibraryFiles(Paths.get(nextArg));
- } else if (arg.equals("--classes-list-output")) {
- builder.setGlobalSyntheticClassesListOutput(Paths.get(nextArg));
} else if (arg.startsWith("--")) {
builder.error(new StringDiagnostic("Unknown option: " + arg, origin));
}