Refactor DexFileMergerHelper to call standard D8 entry.

Bug: b/241063980
Change-Id: I4a91ca2c642336e29c2eb730038eb5d41ae963c7
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index e5447b3..a94d834 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -4,27 +4,11 @@
 
 package com.android.tools.r8;
 
-import static com.android.tools.r8.utils.ExceptionUtils.unwrapExecutionException;
 
-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.graph.AppInfo;
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
-import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.InternalOptions.DesugarState;
-import com.android.tools.r8.utils.ThreadUtils;
-import com.android.tools.r8.utils.Timing;
-import java.io.IOException;
-import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
 
 public class DexFileMergerHelper {
 
@@ -57,56 +41,26 @@
     return aIndex <= bIndex ? a.get() : b.get();
   }
 
+  // NOTE: Don't change this signature! Reflectively accessed from bazel DexFileMerger.
   public static void run(
       D8Command command, Boolean minimalMainDex, Map<String, Integer> inputOrdering)
       throws CompilationFailedException {
     InternalOptions options = command.getInternalOptions();
+
+    // TODO(b/241063980): Move this to D8Command.Builder.setDisableDesugaring(true) in bazel.
+    options.desugarState = DesugarState.OFF;
+
+    // TODO(b/241063980): Is this configuration needed?
+    options.enableMainDexListCheck = false;
+
+    // TODO(b/241063980): Is this configuration needed?
+    options.minimalMainDex = minimalMainDex;
+
+    // TODO(b/241063980): Add API to configure this in D8Command.Builder.
     options.programClassConflictResolver =
         new DexFileMergerHelper(inputOrdering)::keepFirstProgramClassConflictResolver;
-    ExceptionUtils.withD8CompilationHandler(
-        options.reporter, () -> runInternal(command.getInputApp(), options, minimalMainDex));
-  }
 
-  private static void runInternal(
-      AndroidApp inputApp, InternalOptions options, Boolean minimalMainDex) throws IOException {
-    options.desugarState = DesugarState.OFF;
-    options.enableMainDexListCheck = false;
-    options.minimalMainDex = minimalMainDex;
-    assert !options.isMinifying();
-    options.inlinerOptions().enableInlining = false;
-    options.outline.enabled = false;
-
-    ExecutorService executor = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
-    try {
-      try {
-        Timing timing = new Timing("DexFileMerger");
-        ApplicationReader applicationReader = new ApplicationReader(inputApp, options, timing);
-        DexApplication app = applicationReader.read(null, executor);
-
-        AppView<AppInfo> appView =
-            AppView.createForD8(
-                AppInfo.createInitialAppInfo(
-                    app,
-                    GlobalSyntheticsStrategy.forNonSynthesizing(),
-                    applicationReader.readMainDexClasses(app)));
-
-        D8.optimize(appView, options, timing, executor);
-
-        List<Marker> markers = appView.dexItemFactory().extractMarkers();
-
-        assert !options.hasMethodsFilter();
-        ApplicationWriter writer = new ApplicationWriter(appView, markers);
-        writer.write(executor);
-        options.printWarnings();
-      } catch (ExecutionException e) {
-        throw unwrapExecutionException(e);
-      } finally {
-        inputApp.signalFinishedToProviders(options.reporter);
-        options.signalFinishedToConsumers();
-      }
-    } finally {
-      executor.shutdown();
-    }
+    D8.runForTesting(command.getInputApp(), options);
   }
 
   public static void runD8ForTesting(D8Command command, boolean dontCreateMarkerInD8)