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) {