Add tool to options for writing it to map file

Change-Id: Ieffb7c411fcff890a48ce18c8c66310af7d1440c
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 1acbd0c..8cf01de 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.dex.ApplicationReader;
 import com.android.tools.r8.dex.ApplicationWriter;
 import com.android.tools.r8.dex.Marker;
-import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.experimental.startup.instrumentation.StartupInstrumentation;
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppServices;
@@ -275,7 +274,7 @@
       boolean hasClassResources = appView.appInfo().app().getFlags().hasReadProgramClassFromCf();
       boolean hasDexResources = appView.appInfo().app().getFlags().hasReadProgramClassFromDex();
 
-      Marker marker = hasClassResources ? options.getMarker(Tool.D8) : null;
+      Marker marker = hasClassResources ? options.getMarker() : null;
 
       timing.time(
           "Run inspections",
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 115471f..0f8380d 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -709,6 +709,7 @@
         ProgramClassCollection.wrappedConflictResolver(
             getClassConflictResolver(), internal.reporter);
 
+    internal.tool = Tool.D8;
     internal.setDumpInputFlags(getDumpInputFlags());
     internal.dumpOptions = dumpOptions();
 
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index 56558ed..69714e7 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -105,6 +105,7 @@
             options.enableStringSwitchConversion = false;
             assert !options.enableVarHandleDesugaring;
             options.enableVarHandleDesugaring = true;
+            options.tool = Tool.L8;
 
             desugar(app, options, executorService);
 
@@ -149,8 +150,7 @@
               appView));
       new GenericSignatureRewriter(appView).run(appView.appInfo().classes(), executor);
 
-      new CfApplicationWriter(appView, options.getMarker(Tool.L8))
-          .write(options.getClassFileConsumer());
+      new CfApplicationWriter(appView, options.getMarker()).write(options.getClassFileConsumer());
       options.printWarnings();
     } catch (ExecutionException e) {
       throw unwrapExecutionException(e);
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 70dc6f3..d9e374d 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.dex.ApplicationReader;
 import com.android.tools.r8.dex.ApplicationWriter;
 import com.android.tools.r8.dex.Marker;
-import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.errors.CheckDiscardDiagnostic;
 import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
@@ -208,7 +207,7 @@
     InternalOptions options = appView.options();
     InspectorImpl.runInspections(options.outputInspections, appView.appInfo().classes());
     try {
-      Marker marker = options.getMarker(Tool.R8);
+      Marker marker = options.getMarker();
       assert marker != null;
       if (options.isGeneratingClassFiles()) {
         new CfApplicationWriter(appView, marker).write(options.getClassFileConsumer(), inputApp);
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 9f5c949..c874ba9 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -1156,6 +1156,8 @@
       internal.threadCount = getThreadCount();
     }
 
+    internal.tool = Tool.R8;
+
     internal.setDumpInputFlags(getDumpInputFlags());
     internal.dumpOptions = dumpOptions();
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java
index 18ab413..422be3d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java
@@ -80,7 +80,8 @@
 
   private final DexItemFactory factory = new DexItemFactory();
   private final Reporter reporter = new Reporter();
-  private final InternalOptions options = new InternalOptions(factory, reporter);
+  private final InternalOptions options =
+      new InternalOptions(factory, reporter).withModifications(options -> options.tool = Tool.L8);
 
   private final MachineDesugaredLibrarySpecification desugaredLibrarySpecification;
   private final Collection<Path> desugaredLibraryImplementation;
@@ -380,7 +381,7 @@
         AppView.createForD8(
             AppInfo.createInitialAppInfo(
                 builder.build(), GlobalSyntheticsStrategy.forNonSynthesizing()));
-    CfApplicationWriter writer = new CfApplicationWriter(appView, options.getMarker(Tool.L8));
+    CfApplicationWriter writer = new CfApplicationWriter(appView, options.getMarker());
     ClassFileConsumer consumer =
         new ClassFileConsumer.ArchiveConsumer(
             lintFile(compilationApiLevel, minApiLevel, FileUtils.JAR_EXTENSION));
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java
index af66d9e..a7f62dd 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.MapIdProvider;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.Version;
+import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.utils.ChainableStringConsumer;
 import com.android.tools.r8.utils.ExceptionUtils;
@@ -22,7 +23,6 @@
 public class ProguardMapSupplier {
 
   public static final String MARKER_KEY_COMPILER = "compiler";
-  public static final String MARKER_VALUE_COMPILER = "R8";
   public static final String MARKER_KEY_COMPILER_VERSION = "compiler_version";
   public static final String MARKER_KEY_COMPILER_HASH = "compiler_hash";
   public static final String MARKER_KEY_MIN_API = "min_api";
@@ -59,8 +59,9 @@
   private final StringConsumer consumer;
   private final InternalOptions options;
   private final Reporter reporter;
+  private final Tool compiler;
 
-  private ProguardMapSupplier(ClassNameMapper classNameMapper, InternalOptions options) {
+  private ProguardMapSupplier(ClassNameMapper classNameMapper, Tool tool, InternalOptions options) {
     assert classNameMapper != null;
     this.classNameMapper = classNameMapper.sorted();
     // TODO(b/217111432): Validate Proguard using ProguardMapChecker without building the entire
@@ -68,11 +69,13 @@
     this.consumer = options.proguardMapConsumer;
     this.options = options;
     this.reporter = options.reporter;
+    this.compiler = tool;
   }
 
   public static ProguardMapSupplier create(
       ClassNameMapper classNameMapper, InternalOptions options) {
-    return new ProguardMapSupplier(classNameMapper, options);
+    assert options.tool != null;
+    return new ProguardMapSupplier(classNameMapper, options.tool, options);
   }
 
   public ProguardMapId writeProguardMap() {
@@ -99,7 +102,7 @@
         "# "
             + MARKER_KEY_COMPILER
             + ": "
-            + MARKER_VALUE_COMPILER
+            + compiler.name()
             + "\n"
             + "# "
             + MARKER_KEY_COMPILER_VERSION
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 b4ca863..bb90099 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -252,6 +252,11 @@
     protoShrinking.enableEnumLiteProtoShrinking = true;
   }
 
+  public InternalOptions withModifications(Consumer<InternalOptions> consumer) {
+    consumer.accept(this);
+    return this;
+  }
+
   void disableAllOptimizations() {
     disableGlobalOptimizations();
     enableNameReflectionOptimization = false;
@@ -432,6 +437,8 @@
   // Contain the contents of the build properties file from the compiler command.
   public DumpOptions dumpOptions;
 
+  public Tool tool = null;
+
   // Hidden marker for classes.dex
   private boolean hasMarker = false;
   private Marker marker;
@@ -441,7 +448,8 @@
     this.marker = marker;
   }
 
-  public Marker getMarker(Tool tool) {
+  public Marker getMarker() {
+    assert tool != null;
     if (hasMarker) {
       return marker;
     }
diff --git a/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java b/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java
index deaaef4..f0b68de 100644
--- a/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java
@@ -154,7 +154,7 @@
       String key = comment.substring(0, colonIndex).trim();
       String value = comment.substring(colonIndex + 1).trim();
       if (key.equals(ProguardMapSupplier.MARKER_KEY_COMPILER)) {
-        assertEquals(ProguardMapSupplier.MARKER_VALUE_COMPILER, value);
+        assertEquals("R8", value);
       } else if (key.equals(ProguardMapSupplier.MARKER_KEY_COMPILER_VERSION)) {
         assertEquals(Version.LABEL, value);
       } else if (key.equals(ProguardMapSupplier.MARKER_KEY_MIN_API)) {
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 5cd98c6..2ee694f 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -17,6 +17,7 @@
 import com.android.tools.r8.benchmarks.BenchmarkResults;
 import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.CustomConversionVersion;
 import com.android.tools.r8.dex.ApplicationReader;
+import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.errors.Unimplemented;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppView;
@@ -2330,8 +2331,8 @@
     return builder;
   }
 
-  public static void writeApplication(AppView<?> appView, InternalOptions options)
-      throws ExecutionException {
+  public static void writeApplication(AppView<?> appView) throws ExecutionException {
+    appView.options().tool = Tool.R8;
     R8.writeApplication(appView, null, Executors.newSingleThreadExecutor());
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java b/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
index 8b89088..4f4e1a8 100644
--- a/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
@@ -91,7 +91,7 @@
     private AndroidApp writeDex() {
       try {
         InternalOptions options = appView.options();
-        ToolHelper.writeApplication(appView, options);
+        ToolHelper.writeApplication(appView);
         options.signalFinishedToConsumers();
         return consumers.build();
       } catch (ExecutionException e) {