Merge "Fix method id merging" into ub-jack
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
index baf6808..8e664ba 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
@@ -58,7 +58,7 @@
   public void srcToExe(@Nonnull File out, boolean zipFile, @Nonnull File... sources)
       throws Exception {
     srcToCommon(sources);
-    setOutputDex(out);
+    setOutputDex(out, zipFile);
     run();
   }
 
@@ -66,21 +66,21 @@
   public void srcToLib(@Nonnull File out, boolean zipFiles, @Nonnull File... sources)
       throws Exception {
     srcToCommon(sources);
-    setOutputJack(out);
+    setOutputJack(out, zipFiles);
     run();
   }
 
   @Override
   public void libToExe(@Nonnull File[] in, @Nonnull File out, boolean zipFile) throws Exception {
     libToCommon(in);
-    setOutputDex(out);
+    setOutputDex(out, zipFile);
     run();
   }
 
   @Override
   public void libToLib(@Nonnull File[] in, @Nonnull File out, boolean zipFiles) throws Exception {
     libToCommon(in);
-    setOutputJack(out);
+    setOutputJack(out, zipFiles);
     run();
   }
 
@@ -250,8 +250,8 @@
     }
   }
 
-  private void setOutputDex(@Nonnull File outDex) throws Exception {
-    if (outDex.isDirectory()) {
+  private void setOutputDex(@Nonnull File outDex, boolean zipFiles) throws Exception {
+    if (!zipFiles) {
       apiV01Config.setOutputDexDir(outDex);
     } else {
       apiV01Config.setProperty(Options.DEX_OUTPUT_CONTAINER_TYPE.getName(), Container.ZIP.name());
@@ -260,8 +260,9 @@
     }
   }
 
-  private void setOutputJack(@Nonnull File outjack) throws Exception {
-    if (!outjack.isDirectory()) {
+  @Override
+  public void setOutputJack(@Nonnull File outjack, boolean zipFiles) throws Exception {
+    if (zipFiles) {
       apiV01Config.setOutputJackFile(outjack);
     } else {
       apiV01Config.setProperty(Options.LIBRARY_OUTPUT_CONTAINER_TYPE.getName(),
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java
index 3f9b33f..8ea71c2 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java
@@ -57,7 +57,7 @@
   public void srcToExe(@Nonnull File out, boolean zipFile, @Nonnull File... sources)
       throws Exception {
     srcToCommon(sources);
-    setOutputDex(out);
+    setOutputDex(out, zipFile);
     run();
   }
 
@@ -65,21 +65,21 @@
   public void srcToLib(@Nonnull File out, boolean zipFiles, @Nonnull File... sources)
       throws Exception {
     srcToCommon(sources);
-    setOutputJack(out);
+    setOutputJack(out, zipFiles);
     run();
   }
 
   @Override
   public void libToExe(@Nonnull File[] in, @Nonnull File out, boolean zipFile) throws Exception {
     libToCommon(in);
-    setOutputDex(out);
+    setOutputDex(out, zipFile);
     run();
   }
 
   @Override
   public void libToLib(@Nonnull File[] in, @Nonnull File out, boolean zipFiles) throws Exception {
     libToCommon(in);
-    setOutputJack(out);
+    setOutputJack(out, zipFiles);
     run();
   }
 
@@ -262,8 +262,8 @@
     }
   }
 
-  private void setOutputDex(@Nonnull File outDex) throws Exception {
-    if (outDex.isDirectory()) {
+  private void setOutputDex(@Nonnull File outDex, boolean zipFiles) throws Exception {
+    if (!zipFiles) {
       apiV02Config.setOutputDexDir(outDex);
     } else {
       apiV02Config.setProperty(Options.DEX_OUTPUT_CONTAINER_TYPE.getName(), Container.ZIP.name());
@@ -272,8 +272,9 @@
     }
   }
 
-  private void setOutputJack(@Nonnull File outjack) throws Exception {
-    if (!outjack.isDirectory()) {
+  @Override
+  public void setOutputJack(@Nonnull File outjack, boolean zipFiles) throws Exception {
+    if (zipFiles) {
       apiV02Config.setOutputJackFile(outjack);
     } else {
       apiV02Config.setProperty(Options.LIBRARY_OUTPUT_CONTAINER_TYPE.getName(),
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java
index d670a6f..8caff3b 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java
@@ -142,4 +142,6 @@
     return ".jayce";
   }
 
+  public abstract void setOutputJack(@Nonnull File outputJack, boolean zipFiles) throws Exception;
+
 }
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
index 22c9578..134785d 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
@@ -53,6 +53,11 @@
 
   protected boolean sanityChecks = true;
 
+  @CheckForNull
+  protected File outputJack;
+
+  boolean zipOutputJackFiles;
+
   JackCliToolchain(@Nonnull File prebuilt) {
     this.jackPrebuilt = prebuilt;
     addProperty(Options.USE_DEFAULT_LIBRARIES.getName(), "false");
@@ -99,14 +104,9 @@
 
     List<String> commandLine = new ArrayList<String>();
 
-    srcToCommon(commandLine, sources);
+    setOutputJack(out, zipFiles);
 
-    if (zipFiles) {
-      commandLine.add("--output-jack");
-    } else {
-      commandLine.add("--output-jack-dir");
-    }
-    commandLine.add(out.getAbsolutePath());
+    srcToCommon(commandLine, sources);
 
     AbstractTestTools.addFile(commandLine, /* mustExist = */ false, sources);
 
@@ -146,6 +146,15 @@
       commandLine.add(meta.getPath());
     }
 
+    if (outputJack != null) {
+      if (zipOutputJackFiles) {
+        commandLine.add("--output-jack");
+      } else {
+        commandLine.add("--output-jack-dir");
+      }
+      commandLine.add(outputJack.getAbsolutePath());
+    }
+
     commandLine.addAll(extraJackArgs);
 
     for (File jarjarFile : jarjarRules) {
@@ -192,14 +201,9 @@
   public void libToLib(@Nonnull File[] in, @Nonnull File out, boolean zipFiles) throws Exception {
     List<String> commandLine = new ArrayList<String>();
 
-    libToCommon(commandLine, getClasspathAsString(), in);
+    setOutputJack(out, zipFiles);
 
-    if (zipFiles) {
-      commandLine.add("--output-jack");
-    } else {
-      commandLine.add("--output-jack-dir");
-    }
-    commandLine.add(out.getAbsolutePath());
+    libToCommon(commandLine, getClasspathAsString(), in);
 
     run(commandLine);
 
@@ -231,6 +235,15 @@
       commandLine.add(meta.getPath());
     }
 
+    if (outputJack != null) {
+      if (zipOutputJackFiles) {
+        commandLine.add("--output-jack");
+      } else {
+        commandLine.add("--output-jack-dir");
+      }
+      commandLine.add(outputJack.getAbsolutePath());
+    }
+
     addProperties(properties, commandLine);
 
     if (!classpath.equals("")) {
@@ -357,6 +370,13 @@
     }
   }
 
+  @Override
+  public void setOutputJack(@Nonnull File outputJack, boolean zipFiles) throws Exception {
+    this.outputJack = outputJack;
+    this.zipOutputJackFiles = zipFiles;
+  }
+
+
   protected void run(@Nonnull List<String> commandLine) {
     ExecuteFile exec = new ExecuteFile(commandLine.toArray(new String[commandLine.size()]));