[Retrace] Update usage message to use parse flags

Change-Id: I55d1b84512fa3cf8638e7b00c26553771d240dcb
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index 5cca6e8..0150f83 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -9,6 +9,9 @@
 import com.android.tools.r8.Diagnostic;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.Keep;
+import com.android.tools.r8.ParseFlagInfo;
+import com.android.tools.r8.ParseFlagInfoImpl;
+import com.android.tools.r8.ParseFlagPrinter;
 import com.android.tools.r8.Version;
 import com.android.tools.r8.retrace.internal.RetraceAbortException;
 import com.android.tools.r8.retrace.internal.RetraceBase;
@@ -21,6 +24,7 @@
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.Timing;
 import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintStream;
@@ -42,11 +46,29 @@
 @Keep
 public class Retrace<T, ST extends StackTraceElementProxy<T, ST>> extends RetraceBase<T, ST> {
 
-  public static final String USAGE_MESSAGE =
+  private static final String USAGE_MESSAGE =
       StringUtils.lines(
-          "Usage: retrace <proguard-map> [stack-trace-file] "
-              + "[--regex <regexp>, --verbose, --info, --quiet, --verify-mapping-file-hash]",
-          "  where <proguard-map> is an r8 generated mapping file.");
+          "Usage: retrace [options] <proguard-map> [stack-trace-file] "
+              + "where <proguard-map> is a generated mapping file and options are:");
+
+  public static List<ParseFlagInfo> getFlags() {
+    return ImmutableList.<ParseFlagInfo>builder()
+        .add(
+            ParseFlagInfoImpl.flag1(
+                "--regex", "<regexp>", "Regular expression for parsing stack-trace-file as lines"))
+        .add(ParseFlagInfoImpl.flag0("--verbose", "Get verbose retraced output"))
+        .add(ParseFlagInfoImpl.flag0("--info", "Write information messages to stdout"))
+        .add(ParseFlagInfoImpl.flag0("--quiet", "Silence ordinary messages printed to stdout"))
+        .add(ParseFlagInfoImpl.flag0("--verify-mapping-file-hash", "Verify the mapping file hash"))
+        .build();
+  }
+
+  static String getUsageMessage() {
+    StringBuilder builder = new StringBuilder();
+    StringUtils.appendLines(builder, USAGE_MESSAGE);
+    new ParseFlagPrinter().addFlags(getFlags()).appendLinesToBuilder(builder);
+    return builder.toString();
+  }
 
   private static RetraceCommand.Builder parseArguments(
       String[] args, DiagnosticsHandler diagnosticsHandler) {
@@ -102,7 +124,7 @@
         diagnosticsHandler.error(
             new StringDiagnostic(
                 String.format("Too many arguments specified for builder at '%s'", context.head())));
-        diagnosticsHandler.error(new StringDiagnostic(USAGE_MESSAGE));
+        diagnosticsHandler.error(new StringDiagnostic(getUsageMessage()));
         throw new RetraceAbortException();
       }
     }
@@ -323,7 +345,7 @@
       }
       assert Arrays.asList(args).contains("--help");
       System.out.println("Retrace " + Version.getVersionString());
-      System.out.print(USAGE_MESSAGE);
+      System.out.print(getUsageMessage());
       return;
     }
     builder.setRetracedStackTraceConsumer(
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java
index b1e37b4..36cfc16 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java
@@ -185,7 +185,7 @@
   public void testHelp() throws IOException {
     ProcessResult processResult = runRetraceCommandLine(null, Arrays.asList("--help"));
     assertEquals(0, processResult.exitCode);
-    assertThat(processResult.stdout, containsString(Retrace.USAGE_MESSAGE));
+    assertThat(processResult.stdout, containsString(Retrace.getUsageMessage()));
   }
 
   @Test