Move construction of marker to internal options

Change-Id: I5c617faa9c426ab231b54f3427130eaf29534af7
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 03b7ada..ee4aa01 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -23,7 +23,6 @@
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.VersionProperties;
 import com.google.common.collect.ImmutableList;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -141,24 +140,6 @@
         });
   }
 
-  // Compute the marker to be placed in the main dex file.
-  static Marker getMarker(InternalOptions options) {
-    if (options.hasMarker()) {
-      return options.getMarker();
-    }
-    if (options.testing.dontCreateMarkerInD8) {
-      return null;
-    }
-    Marker marker = new Marker(Tool.D8)
-        .setVersion(Version.LABEL)
-        .setCompilationMode(options.debug ? CompilationMode.DEBUG : CompilationMode.RELEASE)
-        .setMinApi(options.minApiLevel);
-    if (Version.isDev()) {
-      marker.setSha1(VersionProperties.INSTANCE.getSha());
-    }
-    return marker;
-  }
-
   private static void run(AndroidApp inputApp, InternalOptions options, ExecutorService executor)
       throws IOException {
     Timing timing = new Timing("D8");
@@ -204,7 +185,7 @@
           break;
         }
       }
-      Marker marker = getMarker(options);
+      Marker marker = options.getMarker(Tool.D8);
       Set<Marker> markers = new HashSet<>(app.dexItemFactory.extractMarkers());
       if (marker != null && hasClassResources) {
         markers.add(marker);
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 4d13628..46ff776 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -79,7 +79,6 @@
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.VersionProperties;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.io.ByteStreams;
@@ -179,24 +178,6 @@
         });
   }
 
-  // Compute the marker to be placed in the main dex file.
-  private static Marker getMarker(InternalOptions options) {
-    if (options.hasMarker()) {
-      return options.getMarker();
-    }
-    Marker marker =
-        new Marker(Tool.R8)
-            .setVersion(Version.LABEL)
-            .setCompilationMode(options.debug ? CompilationMode.DEBUG : CompilationMode.RELEASE);
-    if (!options.isGeneratingClassFiles()) {
-      marker.setMinApi(options.minApiLevel);
-    }
-    if (Version.isDev()) {
-      marker.setSha1(VersionProperties.INSTANCE.getSha());
-    }
-    return marker;
-  }
-
   static void writeApplication(
       ExecutorService executorService,
       DexApplication application,
@@ -208,7 +189,7 @@
       ProguardMapSupplier proguardMapSupplier)
       throws ExecutionException {
     try {
-      Marker marker = getMarker(options);
+      Marker marker = options.getMarker(Tool.R8);
       assert marker != null;
       if (options.isGeneratingClassFiles()) {
         new CfApplicationWriter(
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index ec1a306..cb0b22f 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -6,6 +6,7 @@
 import static com.google.common.base.Predicates.not;
 
 import com.android.tools.r8.ClassFileConsumer;
+import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.DataResourceConsumer;
 import com.android.tools.r8.DataResourceProvider;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
@@ -14,6 +15,7 @@
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.Version;
 import com.android.tools.r8.dex.Marker;
+import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.IncompleteNestNestDesugarDiagnosic;
 import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic;
@@ -232,17 +234,33 @@
   private boolean hasMarker = false;
   private Marker marker;
 
-  public boolean hasMarker() {
-    return hasMarker;
-  }
-
   public void setMarker(Marker marker) {
     this.hasMarker = true;
     this.marker = marker;
   }
 
-  public Marker getMarker() {
-    assert hasMarker();
+  public Marker getMarker(Tool tool) {
+    if (hasMarker) {
+      return marker;
+    }
+    return createMarker(tool);
+  }
+
+  // Compute the marker to be placed in the main dex file.
+  private Marker createMarker(Tool tool) {
+    if (tool == Tool.D8 && testing.dontCreateMarkerInD8) {
+      return null;
+    }
+    Marker marker =
+        new Marker(tool)
+            .setVersion(Version.LABEL)
+            .setCompilationMode(debug ? CompilationMode.DEBUG : CompilationMode.RELEASE);
+    if (!isGeneratingClassFiles()) {
+      marker.setMinApi(minApiLevel);
+    }
+    if (Version.isDev()) {
+      marker.setSha1(VersionProperties.INSTANCE.getSha());
+    }
     return marker;
   }