Remove compat dex builder

Bug: 155464736
Change-Id: Id1b44f259fbe94cb78d98d24eee4724b52ec5650
diff --git a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
deleted file mode 100644
index 69cbddb..0000000
--- a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.compatdexbuilder;
-
-import com.android.tools.r8.ByteDataView;
-import com.android.tools.r8.CompatDxHelper;
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.D8;
-import com.android.tools.r8.D8Command;
-import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.origin.ArchiveEntryOrigin;
-import com.android.tools.r8.origin.PathOrigin;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.ThreadUtils;
-import com.google.common.io.ByteStreams;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.zip.CRC32;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
-
-public class CompatDexBuilder {
-
-  private static class DexConsumer extends DexIndexedConsumer.ForwardingConsumer {
-
-    byte[] bytes;
-
-    public DexConsumer() {
-      super(null);
-    }
-
-    @Override
-    public synchronized void accept(
-        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
-      super.accept(fileIndex, data, descriptors, handler);
-      assert bytes == null;
-      bytes = data.copyByteData();
-    }
-
-    byte[] getBytes() {
-      return bytes;
-    }
-  }
-
-  private String input = null;
-  private String output = null;
-  private int numberOfThreads = 8;
-  private boolean noLocals = false;
-  private boolean backportStatics = false;
-
-  public static void main(String[] args)
-      throws IOException, InterruptedException, ExecutionException {
-    new CompatDexBuilder().run(args);
-  }
-
-  private void run(String[] args) throws IOException, InterruptedException, ExecutionException {
-    List<String> flags = new ArrayList<>();
-
-    for (String arg : args) {
-      if (arg.startsWith("@")) {
-        flags.addAll(Files.readAllLines(Paths.get(arg.substring(1))));
-      } else {
-        flags.add(arg);
-      }
-    }
-
-    for (int i = 0; i < flags.size(); i++) {
-      String flag = flags.get(i);
-      if (flag.startsWith("--positions=")) {
-        String positionsValue = flag.substring("--positions=".length());
-        if (positionsValue.startsWith("throwing") || positionsValue.startsWith("important")) {
-          noLocals = true;
-        }
-        continue;
-      }
-      if (flag.startsWith("--num-threads=")) {
-        numberOfThreads = Integer.parseInt(flag.substring("--num-threads=".length()));
-        continue;
-      }
-      switch (flag) {
-        case "--input_jar":
-          input = flags.get(++i);
-          break;
-        case "--output_zip":
-          output = flags.get(++i);
-          break;
-        case "--verify-dex-file":
-        case "--no-verify-dex-file":
-        case "--show_flags":
-        case "--no-optimize":
-        case "--nooptimize":
-        case "--help":
-          // Ignore
-          break;
-        case "--nolocals":
-          noLocals = true;
-          break;
-        case "--desugar-backport-statics":
-          backportStatics = true;
-          break;
-        default:
-          System.err.println("Unsupported option: " + flag);
-          System.exit(1);
-      }
-    }
-
-    if (input == null) {
-      System.err.println("No input jar specified");
-      System.exit(1);
-    }
-
-    if (output == null) {
-      System.err.println("No output jar specified");
-      System.exit(1);
-    }
-
-    ExecutorService executor = ThreadUtils.getExecutorService(numberOfThreads);
-    try (ZipOutputStream out = new ZipOutputStream(Files.newOutputStream(Paths.get(output)))) {
-
-      List<ZipEntry> toDex = new ArrayList<>();
-
-      try (ZipFile zipFile = new ZipFile(input, StandardCharsets.UTF_8)) {
-        final Enumeration<? extends ZipEntry> entries = zipFile.entries();
-        while (entries.hasMoreElements()) {
-          ZipEntry entry = entries.nextElement();
-          if (!entry.getName().endsWith(".class")) {
-            try (InputStream stream = zipFile.getInputStream(entry)) {
-              addEntry(entry.getName(), stream, out);
-            }
-          } else {
-            toDex.add(entry);
-          }
-        }
-
-        List<Future<DexConsumer>> futures = new ArrayList<>(toDex.size());
-        for (int i = 0; i < toDex.size(); i++) {
-          ZipEntry classEntry = toDex.get(i);
-          futures.add(executor.submit(() -> dexEntry(zipFile, classEntry, executor)));
-        }
-        for (int i = 0; i < futures.size(); i++) {
-          ZipEntry entry = toDex.get(i);
-          DexConsumer consumer = futures.get(i).get();
-          addEntry(entry.getName() + ".dex", consumer.getBytes(), out);
-        }
-      }
-    } finally {
-      executor.shutdown();
-    }
-  }
-
-  private DexConsumer dexEntry(ZipFile zipFile, ZipEntry classEntry, ExecutorService executor)
-      throws IOException, CompilationFailedException {
-    DexConsumer consumer = new DexConsumer();
-    D8Command.Builder builder = D8Command.builder();
-    CompatDxHelper.ignoreDexInArchive(builder);
-    builder
-        .setProgramConsumer(consumer)
-        .setMode(noLocals ? CompilationMode.RELEASE : CompilationMode.DEBUG)
-        .setMinApiLevel(AndroidApiLevel.H_MR2.getLevel())
-        .setDisableDesugaring(true);
-    if (backportStatics) {
-      CompatDxHelper.enableDesugarBackportStatics(builder);
-    }
-    try (InputStream stream = zipFile.getInputStream(classEntry)) {
-      builder.addClassProgramData(
-          ByteStreams.toByteArray(stream),
-          new ArchiveEntryOrigin(
-              classEntry.getName(), new PathOrigin(Paths.get(zipFile.getName()))));
-    }
-    D8.run(builder.build(), executor);
-    return consumer;
-  }
-
-  private static void addEntry(String name, InputStream stream, ZipOutputStream out)
-      throws IOException {
-    addEntry(name, ByteStreams.toByteArray(stream), out);
-  }
-
-  private static void addEntry(String name, byte[] bytes, ZipOutputStream out) throws IOException {
-    ZipEntry zipEntry = new ZipEntry(name);
-    CRC32 crc32 = new CRC32();
-    crc32.update(bytes);
-    zipEntry.setSize(bytes.length);
-    zipEntry.setMethod(ZipEntry.STORED);
-    zipEntry.setCrc(crc32.getValue());
-    zipEntry.setTime(0);
-    out.putNextEntry(zipEntry);
-    out.write(bytes);
-    out.closeEntry();
-  }
-}
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 5fe68ca..083584f 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -8,7 +8,6 @@
 -keep public class com.android.tools.r8.D8 { public static void main(java.lang.String[]); }
 -keep public class com.android.tools.r8.R8 { public static void main(java.lang.String[]); }
 -keep public class com.android.tools.r8.ExtractMarker { public static void main(java.lang.String[]); }
--keep public class com.android.tools.r8.compatdexbuilder.CompatDexBuilder { public static void main(java.lang.String[]); }
 -keep public class com.android.tools.r8.dexfilemerger.DexFileMerger { public static void main(java.lang.String[]); }
 -keep public class com.android.tools.r8.dexsplitter.DexSplitter { public static void main(java.lang.String[]); }
 
diff --git a/src/test/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilderTests.java b/src/test/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilderTests.java
deleted file mode 100644
index 341fb67..0000000
--- a/src/test/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilderTests.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.compatdexbuilder;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.D8;
-import com.android.tools.r8.D8Command;
-import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
-import com.google.common.collect.ImmutableList;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-
-public class CompatDexBuilderTests {
-
-  @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Test
-  public void compileManyClasses() throws IOException, InterruptedException, ExecutionException {
-    final String SUBDIR = "naming001";
-    final String INPUT_JAR = ToolHelper.TESTS_BUILD_DIR + "examples/" + SUBDIR + ".jar";
-    final List<String> CLASS_NAMES =
-        ImmutableList.of(
-            "A",
-            "B",
-            "C",
-            "D",
-            "E",
-            "F",
-            "G",
-            "H",
-            "I",
-            "J",
-            "K",
-            "L",
-            "Reflect2$A",
-            "Reflect2$B",
-            "Reflect2",
-            "Reflect");
-
-    // Run CompatDexBuilder on naming001.jar
-    Path outputZip = temp.getRoot().toPath().resolve("out.zip");
-    CompatDexBuilder.main(
-        new String[] {"--input_jar", INPUT_JAR, "--output_zip", outputZip.toString()});
-    assertTrue(outputZip.toFile().exists());
-
-    // Verify if all the classes have their corresponding ".class.dex" files in the zip.
-    Set<String> expectedNames = new HashSet<>();
-    for (String className : CLASS_NAMES) {
-      expectedNames.add(SUBDIR + "/" + className + ".class.dex");
-    }
-    try (ZipFile zipFile = new ZipFile(outputZip.toFile(), StandardCharsets.UTF_8)) {
-      for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
-        ZipEntry ze = e.nextElement();
-        expectedNames.remove(ze.getName());
-      }
-    }
-    assertTrue(expectedNames.isEmpty());
-  }
-
-  @Test
-  public void compileTwoClassesAndRun()
-      throws IOException, InterruptedException, ExecutionException, CompilationFailedException {
-    // Run CompatDexBuilder on dexMergeSample.jar
-    final String INPUT_JAR = ToolHelper.EXAMPLES_BUILD_DIR + "dexmergesample.jar";
-    Path outputZip = temp.getRoot().toPath().resolve("out.zip");
-    CompatDexBuilder.main(
-        new String[] {"--input_jar", INPUT_JAR, "--output_zip", outputZip.toString()});
-
-    // Merge zip content into a single dex file.
-    Path d8OutDir = temp.newFolder().toPath();
-    D8.run(
-        D8Command.builder()
-            .setOutput(d8OutDir, OutputMode.DexIndexed)
-            .addProgramFiles(outputZip)
-            .build());
-
-    // Validate by running methods of Class1 and Class2
-    for (String className : new String[] {"Class1", "Class2"}) {
-      ArtCommandBuilder artCommandBuilder = new ArtCommandBuilder();
-      artCommandBuilder.appendClasspath(d8OutDir.resolve("classes.dex").toString());
-      artCommandBuilder.setMainClass("dexmergesample." + className);
-      String out = ToolHelper.runArt(artCommandBuilder);
-      assertEquals(out, className + "\n");
-    }
-  }
-}