Use CliParser in ExtractMarkerCommand.

Bug: b/510714591
Change-Id: I276efbe9a7acdfbc960ab88da8962115e84b8179
diff --git a/src/main/java/com/android/tools/r8/ExtractMarker.java b/src/main/java/com/android/tools/r8/ExtractMarker.java
index f52d7cc..01b1a92 100644
--- a/src/main/java/com/android/tools/r8/ExtractMarker.java
+++ b/src/main/java/com/android/tools/r8/ExtractMarker.java
@@ -135,7 +135,7 @@
     MarkerInfoConsumer consumer = new MarkerInfoPrintConsumer(out);
     ExtractMarkerCommand command = builder.setMarkerInfoConsumer(consumer).build();
     if (command.isPrintHelp()) {
-      System.out.println(ExtractMarkerCommand.USAGE_MESSAGE);
+      System.out.println(ExtractMarkerCommand.usageMessage());
       return;
     }
     run(command);
@@ -144,7 +144,7 @@
   /**
    * Command-line entry to the extract marker tool.
    *
-   * <p>See {@link ExtractMarkerCommand#USAGE_MESSAGE} or run with {@code --help} for usage
+   * <p>See {@link ExtractMarkerCommand#usageMessage()} or run with {@code --help} for usage
    * information.
    */
   public static void main(String[] args) throws Exception {
diff --git a/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java b/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java
index 2838917..eafb095 100644
--- a/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java
+++ b/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
+import com.android.tools.r8.utils.internal.CliParser;
 import com.android.tools.r8.utils.internal.StringUtils;
 import com.android.tools.r8.utils.internal.collections.Pair;
 import java.nio.file.Path;
@@ -95,7 +96,7 @@
     }
 
     public ExtractMarkerCommand build() {
-      // If printing versions ignore everything else.
+      // If printing help ignore everything else.
       if (isPrintHelp()) {
         return new ExtractMarkerCommand(isPrintHelp());
       }
@@ -103,11 +104,9 @@
     }
   }
 
-  static final String USAGE_MESSAGE =
-      StringUtils.joinLines(
-          "Usage: extractmarker [options] <input-files>",
-          " where <input-files> are D8 supported input/output files and options are:",
-          "  --help                  # Print this message.");
+  static String usageMessage() {
+    return createParser().getUsageMessage();
+  }
 
   public static Builder builder() {
     return builder(new DiagnosticsHandler() {});
@@ -119,22 +118,25 @@
 
   public static Builder parse(String[] args) {
     Builder builder = builder();
-    parse(args, builder);
+    createParser()
+        .parse(
+            args,
+            builder,
+            err -> {
+              throw new CompilationError(err);
+            });
     return builder;
   }
 
-  private static void parse(String[] args, Builder builder) {
-    for (int i = 0; i < args.length; i++) {
-      String arg = args[i].trim();
-      if (arg.equals("--help")) {
-        builder.setPrintHelp(true);
-      } else {
-        if (arg.startsWith("--")) {
-          throw new CompilationError("Unknown option: " + arg);
-        }
-        builder.addProgramFiles(Paths.get(arg));
-      }
-    }
+  private static CliParser<ExtractMarkerCommand.Builder> createParser() {
+    var header =
+        StringUtils.joinLines(
+            "Usage: extractmarker [options] <input-files>",
+            " where <input-files> are D8 supported input/output files and options are:");
+    var parser = new CliParser<ExtractMarkerCommand.Builder>(header);
+    return parser
+        .option0("--help", "Print this message.", b -> b.setPrintHelp(true), "-h")
+        .positional((b, arg) -> b.addProgramFiles(Paths.get(arg)));
   }
 
   private final boolean printHelp;
diff --git a/src/test/java/com/android/tools/r8/ExtractMarkerTest.java b/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
index 1826b7e..72fbd84 100644
--- a/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
@@ -47,11 +47,12 @@
   public void testHelpMessage() {
     parameters.assumeIsOrSimulateNoneRuntime();
     assertEquals(
-        StringUtils.joinLines(
+        StringUtils.lines(
             "Usage: extractmarker [options] <input-files>",
             " where <input-files> are D8 supported input/output files and options are:",
-            "  --help                  # Print this message."),
-        ExtractMarkerCommand.USAGE_MESSAGE);
+            "  --help",
+            "  -h                      # Print this message."),
+        ExtractMarkerCommand.usageMessage());
   }
 
   public ExtractMarkerTest(TestParameters parameters, boolean includeClassesChecksum) {