[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));
       }