DexSplitter: copy source markers, don't add new marker.

Bug:
Change-Id: I2cbfd7b0bd95b9695d28baf84aea039b2f0ec06a
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index 627d5ef..06f6d03 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -105,7 +105,7 @@
     }
   }
 
-  public static void runForTesting(D8Command command, boolean dontCreateMarkerInD8)
+  public static void runD8ForTesting(D8Command command, boolean dontCreateMarkerInD8)
       throws IOException, CompilationException {
     InternalOptions options = command.getInternalOptions();
     options.testing.dontCreateMarkerInD8 = dontCreateMarkerInD8;
diff --git a/src/main/java/com/android/tools/r8/DexSplitterHelper.java b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
index 8c29ca8..ee6c012 100644
--- a/src/main/java/com/android/tools/r8/DexSplitterHelper.java
+++ b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
@@ -23,8 +23,8 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ExecutionException;
@@ -53,6 +53,7 @@
         DexApplication app =
             new ApplicationReader(command.getInputApp(), options, timing).read(null, executor);
 
+        List<Marker> markers = app.dexItemFactory.extractMarkers();
 
         ClassNameMapper mapper = null;
         if (proguardMap != null) {
@@ -76,11 +77,10 @@
           DexIndexedConsumer consumer = new DirectoryConsumer(outputDir);
 
           try {
-            Marker marker = D8.getMarker(options);
             new ApplicationWriter(
                     featureApp,
                     options,
-                    marker == null ? null : Collections.singletonList(marker),
+                    markers,
                     null,
                     NamingLens.getIdentityLens(),
                     null,
@@ -122,4 +122,11 @@
     }
     return applications;
   }
+
+  public static void runD8ForTesting(D8Command command, boolean dontCreateMarkerInD8)
+      throws IOException, CompilationException {
+    InternalOptions options = command.getInternalOptions();
+    options.testing.dontCreateMarkerInD8 = dontCreateMarkerInD8;
+    D8.runForTesting(command.getInputApp(), options);
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/dexfilemerger/DexFileMergerTests.java b/src/test/java/com/android/tools/r8/dexfilemerger/DexFileMergerTests.java
index 60edc6d..e7b666c 100644
--- a/src/test/java/com/android/tools/r8/dexfilemerger/DexFileMergerTests.java
+++ b/src/test/java/com/android/tools/r8/dexfilemerger/DexFileMergerTests.java
@@ -49,7 +49,7 @@
             .addProgramFiles(Paths.get(CLASS2_CLASS))
             .build();
 
-    DexFileMergerHelper.runForTesting(command, dontCreateMarkerInD8);
+    DexFileMergerHelper.runD8ForTesting(command, dontCreateMarkerInD8);
 
     return mergerInputZip;
   }
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
index 2db8fe0..ed293f6 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
@@ -10,14 +10,16 @@
 
 import com.android.tools.r8.CompilationException;
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
+import com.android.tools.r8.DexSplitterHelper;
+import com.android.tools.r8.ExtractMarker;
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.ResourceException;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
+import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.dexsplitter.DexSplitter.Options;
 import com.android.tools.r8.utils.DexInspector;
 import com.android.tools.r8.utils.DexInspector.ClassSubject;
@@ -53,6 +55,65 @@
 
   @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
 
+  private Path createInput(boolean dontCreateMarkerInD8)
+      throws IOException, CompilationFailedException, CompilationException {
+    // Initial normal compile to create dex files.
+    Path inputZip = temp.newFolder().toPath().resolve("input.zip");
+    D8Command command =
+        D8Command.builder()
+            .setOutput(inputZip, OutputMode.DexIndexed)
+            .addProgramFiles(Paths.get(CLASS1_CLASS))
+            .addProgramFiles(Paths.get(CLASS2_CLASS))
+            .addProgramFiles(Paths.get(CLASS3_CLASS))
+            .addProgramFiles(Paths.get(CLASS3_INNER_CLASS))
+            .addProgramFiles(Paths.get(CLASS4_CLASS))
+            .addProgramFiles(Paths.get(CLASS4_LAMBDA_INTERFACE))
+            .build();
+
+    DexSplitterHelper.runD8ForTesting(command, dontCreateMarkerInD8);
+
+    return inputZip;
+  }
+
+  private void testMarker(boolean addMarkerToInput)
+      throws CompilationFailedException, CompilationException, IOException, ResourceException,
+          ExecutionException {
+    Path inputZip = createInput(!addMarkerToInput);
+
+    Path output = temp.newFolder().toPath().resolve("output");
+    Files.createDirectory(output);
+    Path splitSpec = createSplitSpec();
+
+    DexSplitter.main(
+        new String[] {
+          "--input", inputZip.toString(),
+          "--output", output.toString(),
+          "--feature-splits", splitSpec.toString()
+        });
+
+    Path base = output.resolve("base").resolve("classes.dex");
+    Path feature = output.resolve("feature1").resolve("classes.dex");
+
+    for (Path path : new Path[] {inputZip, base, feature}) {
+      Marker marker = ExtractMarker.extractMarkerFromDexFile(path);
+      assertEquals(addMarkerToInput, marker != null);
+    }
+  }
+
+  @Test
+  public void testMarkerPreserved()
+      throws CompilationFailedException, CompilationException, IOException, ResourceException,
+          ExecutionException {
+    testMarker(true);
+  }
+
+  @Test
+  public void testMarkerNotAdded()
+      throws CompilationFailedException, CompilationException, IOException, ResourceException,
+          ExecutionException {
+    testMarker(false);
+  }
+
   /**
    * To test the file splitting we have 3 classes that we distribute like this: Class1 -> base
    * Class2 -> feature1 Class3 -> feature1
@@ -71,19 +132,7 @@
   private void noObfuscation(boolean useOptions)
       throws IOException, CompilationFailedException, FeatureMappingException,
       ResourceException, ExecutionException, CompilationException {
-    // Initial normal compile to create dex files.
-    Path inputZip = temp.newFolder().toPath().resolve("input.zip");
-    D8.run(
-        D8Command.builder()
-            .setOutput(inputZip, OutputMode.DexIndexed)
-            .addProgramFiles(Paths.get(CLASS1_CLASS))
-            .addProgramFiles(Paths.get(CLASS2_CLASS))
-            .addProgramFiles(Paths.get(CLASS3_CLASS))
-            .addProgramFiles(Paths.get(CLASS3_INNER_CLASS))
-            .addProgramFiles(Paths.get(CLASS4_CLASS))
-            .addProgramFiles(Paths.get(CLASS4_LAMBDA_INTERFACE))
-            .build());
-
+    Path inputZip = createInput(false);
     Path output = temp.newFolder().toPath().resolve("output");
     Files.createDirectory(output);
     Path splitSpec = createSplitSpec();
@@ -189,19 +238,7 @@
   private void splitFromJars(boolean useOptions, boolean explicitBase)
       throws IOException, CompilationFailedException, FeatureMappingException, ResourceException,
       ExecutionException, CompilationException {
-    // Initial normal compile to create dex files.
-    Path inputZip = temp.newFolder().toPath().resolve("input.zip");
-    D8.run(
-        D8Command.builder()
-            .setOutput(inputZip, OutputMode.DexIndexed)
-            .addProgramFiles(Paths.get(CLASS1_CLASS))
-            .addProgramFiles(Paths.get(CLASS2_CLASS))
-            .addProgramFiles(Paths.get(CLASS3_CLASS))
-            .addProgramFiles(Paths.get(CLASS3_INNER_CLASS))
-            .addProgramFiles(Paths.get(CLASS4_CLASS))
-            .addProgramFiles(Paths.get(CLASS4_LAMBDA_INTERFACE))
-            .build());
-
+    Path inputZip = createInput(false);
     Path output = temp.newFolder().toPath().resolve("output");
     Files.createDirectory(output);
     Path baseJar = temp.getRoot().toPath().resolve("base.jar");