Uncomment information about --classfile and --dex
Bug: 65390962
Change-Id: Id5dcad6c52692994020b3ceb9e5cb3b92a30b2a4
diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index 6984283..fd4f570 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -54,9 +54,8 @@
" and options are:",
" --release # Compile without debugging information (default).",
" --debug # Compile with debugging information.",
- // TODO(b/65390962): Add help for output-mode flags once the CF backend is complete.
- // " --dex # Compile program to DEX file format (default).",
- // " --classfile # Compile program to Java classfile format.",
+ " --dex # Compile program to DEX file format (default).",
+ " --classfile # Compile program to Java classfile format.",
" --output <file> # Output result in <file>.",
" # <file> must be an existing directory or a zip file.",
" --lib <file> # Add <file> as a library resource.",
diff --git a/src/test/java/com/android/tools/r8/R8EntryPointTests.java b/src/test/java/com/android/tools/r8/R8EntryPointTests.java
index edf7f20..0bbc7bc 100644
--- a/src/test/java/com/android/tools/r8/R8EntryPointTests.java
+++ b/src/test/java/com/android/tools/r8/R8EntryPointTests.java
@@ -4,6 +4,9 @@
package com.android.tools.r8;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.StringContains.containsString;
+
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.FileUtils;
import com.google.common.collect.ImmutableList;
@@ -131,6 +134,66 @@
Assert.assertTrue(Files.isRegularFile(testFlags.getParent().resolve(SEEDS)));
}
+ @Test
+ public void testSpecifyClassfile() throws IOException, InterruptedException {
+ Path out = temp.newFile("classfile.zip").toPath();
+ ProcessResult r8 =
+ ToolHelper.forkR8(
+ Paths.get("."),
+ "--lib",
+ ToolHelper.getJava8RuntimeJar().toString(),
+ "--classfile",
+ "--output",
+ out.toString(),
+ "--pg-conf",
+ PROGUARD_FLAGS.toString(),
+ "--pg-conf",
+ testFlags.toString(),
+ INPUT_JAR.toString());
+ Assert.assertEquals(0, r8.exitCode);
+ }
+
+ @Test
+ public void testSpecifyDex() throws IOException, InterruptedException {
+ Path out = temp.newFile("dex.zip").toPath();
+ ProcessResult r8 =
+ ToolHelper.forkR8(
+ Paths.get("."),
+ "--lib",
+ ToolHelper.getDefaultAndroidJar().toString(),
+ "--dex",
+ "--output",
+ out.toString(),
+ "--pg-conf",
+ PROGUARD_FLAGS.toString(),
+ "--pg-conf",
+ testFlags.toString(),
+ INPUT_JAR.toString());
+ Assert.assertEquals(0, r8.exitCode);
+ }
+
+ @Test
+ public void testSpecifyDexAndClassfileNotAllowed() throws IOException, InterruptedException {
+ Path out = temp.newFile("dex.zip").toPath();
+ ProcessResult r8 =
+ ToolHelper.forkR8(
+ Paths.get("."),
+ "--lib",
+ ToolHelper.getDefaultAndroidJar().toString(),
+ "--dex",
+ "--classfile",
+ "--output",
+ out.toString(),
+ "--pg-conf",
+ PROGUARD_FLAGS.toString(),
+ "--pg-conf",
+ testFlags.toString(),
+ INPUT_JAR.toString());
+ Assert.assertEquals(1, r8.exitCode);
+ assertThat(
+ r8.stderr, containsString("Cannot compile in both --dex and --classfile output mode"));
+ }
+
private R8Command getCommand(Path out) throws IOException, CompilationFailedException {
return R8Command.builder()
.addLibraryFiles(ToolHelper.getDefaultAndroidJar())