Remove unused classes

Change-Id: I2a29fa395247b7fccedd4ed3d8e17e2954e397fa
diff --git a/src/main/java/com/android/tools/r8/graph/DelegatingUseRegistry.java b/src/main/java/com/android/tools/r8/graph/DelegatingUseRegistry.java
deleted file mode 100644
index 1375e9d..0000000
--- a/src/main/java/com/android/tools/r8/graph/DelegatingUseRegistry.java
+++ /dev/null
@@ -1,69 +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.graph;
-
-public class DelegatingUseRegistry extends UseRegistry {
-    private final UseRegistry delegate;
-
-    public DelegatingUseRegistry(DexItemFactory factory, UseRegistry delegate) {
-      super(factory);
-      this.delegate = delegate;
-    }
-
-    @Override
-    public boolean registerInvokeVirtual(DexMethod method) {
-      return delegate.registerInvokeVirtual(method);
-    }
-
-    @Override
-    public boolean registerInvokeDirect(DexMethod method) {
-      return delegate.registerInvokeDirect(method);
-    }
-
-    @Override
-    public boolean registerInvokeStatic(DexMethod method) {
-      return delegate.registerInvokeStatic(method);
-    }
-
-    @Override
-    public boolean registerInvokeInterface(DexMethod method) {
-      return delegate.registerInvokeInterface(method);
-    }
-
-    @Override
-    public boolean registerInvokeSuper(DexMethod method) {
-      return delegate.registerInvokeSuper(method);
-    }
-
-    @Override
-    public boolean registerInstanceFieldWrite(DexField field) {
-      return delegate.registerInstanceFieldWrite(field);
-    }
-
-    @Override
-    public boolean registerInstanceFieldRead(DexField field) {
-      return delegate.registerInstanceFieldRead(field);
-    }
-
-    @Override
-    public boolean registerNewInstance(DexType type) {
-      return delegate.registerNewInstance(type);
-    }
-
-    @Override
-    public boolean registerStaticFieldRead(DexField field) {
-      return delegate.registerStaticFieldRead(field);
-    }
-
-    @Override
-    public boolean registerStaticFieldWrite(DexField field) {
-      return delegate.registerStaticFieldWrite(field);
-    }
-
-    @Override
-    public boolean registerTypeReference(DexType type) {
-      return delegate.registerTypeReference(type);
-    }
-
-}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CodeOptimization.java b/src/main/java/com/android/tools/r8/ir/conversion/CodeOptimization.java
index 8a40db4..ce571d6 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CodeOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CodeOptimization.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
-import com.google.common.collect.ImmutableList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.function.Consumer;
@@ -41,42 +40,4 @@
       }
     };
   }
-
-  /**
-   * Builder for {@link CodeOptimization}.
-   *
-   * Users can append either {@link CodeOptimization}, or simply {@link IRCode} consumer.
-   *
-   * Note that the order of everything that is appended through the builder matters.
-   */
-  public static class Builder {
-    private ImmutableList.Builder<CodeOptimization> processingQueue;
-
-    private Builder() {
-      processingQueue = ImmutableList.builder();
-    }
-
-    public static Builder builder() {
-      return new Builder();
-    }
-
-    public Builder addIRCodeConsumer(Consumer<IRCode> consumer) {
-      processingQueue.add(from(consumer));
-      return this;
-    }
-
-    public Builder addCodeOptimization(CodeOptimization optimization) {
-      processingQueue.add(optimization);
-      return this;
-    }
-
-    public CodeOptimization build() {
-      return (code, feedback, methodProcessor) -> {
-        processingQueue
-            .build()
-            .forEach(codeOptimization ->
-                codeOptimization.optimize(code, feedback, methodProcessor));
-      };
-    }
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java b/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
deleted file mode 100644
index b46df5f..0000000
--- a/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) 2018, 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.jar;
-
-import static org.objectweb.asm.Opcodes.ALOAD;
-import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
-import static org.objectweb.asm.Opcodes.DLOAD;
-import static org.objectweb.asm.Opcodes.FLOAD;
-import static org.objectweb.asm.Opcodes.ILOAD;
-import static org.objectweb.asm.Opcodes.LLOAD;
-
-import com.android.tools.r8.graph.ArgumentUse;
-import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexProto;
-import com.android.tools.r8.graph.DexType;
-import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
-import it.unimi.dsi.fastutil.ints.Int2IntMap;
-import org.objectweb.asm.MethodVisitor;
-
-public class JarArgumentUseVisitor extends MethodVisitor {
-  private final ArgumentUse registry;
-  private final Int2IntMap slotToArgument;
-  private final int arguments;
-
-  public JarArgumentUseVisitor(DexEncodedMethod method, ArgumentUse registry) {
-    super(ASM_VERSION);
-    this.registry = registry;
-
-    DexProto proto = method.method.proto;
-    boolean isStatic = method.accessFlags.isStatic();
-
-    boolean hasLongOrDouble = false;
-    for (DexType value : proto.parameters.values) {
-      if (value.isLongType() || value.isDoubleType()) {
-        hasLongOrDouble = true;
-        break;
-      }
-    }
-    if (hasLongOrDouble) {
-      this.slotToArgument = new Int2IntArrayMap();
-      int nextSlot = 0;
-      int nextArgument = 0;
-      if (!isStatic) {
-        slotToArgument.put(nextSlot++, nextArgument++);
-      }
-      for (DexType value : proto.parameters.values) {
-        slotToArgument.put(nextSlot++, nextArgument++);
-        if (value.isLongType() || value.isDoubleType()) {
-          nextSlot++;
-        }
-      }
-      this.arguments = nextSlot;
-    } else {
-      this.slotToArgument = null;
-      this.arguments = proto.parameters.values.length + (isStatic ? 0 : 1);
-    }
-  }
-
-  @Override
-  public void visitIincInsn(final int var, final int increment) {
-    if (var < arguments) {
-      registry.register(slotToArgument == null ? var : slotToArgument.get(var));
-    }
-  }
-
-  @Override
-  public void visitVarInsn(final int opcode, final int var) {
-    switch (opcode) {
-      case ILOAD:
-      case LLOAD:
-      case FLOAD:
-      case DLOAD:
-      case ALOAD:
-        if (var < arguments) {
-          registry.register(slotToArgument == null ? var : slotToArgument.get(var));
-        }
-        break;
-
-      default:
-        // Ignore
-    }
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java b/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
deleted file mode 100644
index fc9ea8b..0000000
--- a/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) 2016, 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.jar;
-
-import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
-
-import com.android.tools.r8.dex.Constants;
-import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.DexCallSite;
-import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexMethodHandle;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.JarApplicationReader;
-import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.graph.UseRegistry.MethodHandleUse;
-import org.objectweb.asm.ConstantDynamic;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-public class JarRegisterEffectsVisitor extends MethodVisitor {
-  private final DexType clazz;
-  private final UseRegistry registry;
-  private final JarApplicationReader application;
-
-  public JarRegisterEffectsVisitor(DexType clazz, UseRegistry registry,
-      JarApplicationReader application) {
-    super(ASM_VERSION);
-    this.clazz = clazz;
-    this.registry = registry;
-    this.application = application;
-  }
-
-  @Override
-  public void visitTypeInsn(int opcode, String name) {
-    DexType type = application.getTypeFromName(name);
-    if (opcode == org.objectweb.asm.Opcodes.NEW) {
-      registry.registerNewInstance(type);
-    } else if (opcode == Opcodes.CHECKCAST) {
-      registry.registerCheckCast(type);
-    } else {
-      registry.registerTypeReference(type);
-    }
-  }
-
-  @Override
-  public void visitMultiANewArrayInsn(String desc, int dims) {
-    registry.registerTypeReference(application.getTypeFromDescriptor(desc));
-  }
-
-  @Override
-  public void visitLdcInsn(Object cst) {
-    if (cst instanceof Type) {
-      if (((Type) cst).getSort() == Type.METHOD) {
-        String descriptor = ((Type) cst).getDescriptor();
-        assert descriptor.charAt(0) == '(';
-        registry.registerProto(application.getProto(descriptor));
-      } else {
-        registry.registerConstClass(application.getType((Type) cst));
-      }
-    } else if (cst instanceof ConstantDynamic) {
-      throw new CompilationError("Unsupported dynamic constant: " + cst.toString());
-    } else if (cst instanceof Handle) {
-      DexMethodHandle handle = DexMethodHandle.fromAsmHandle((Handle) cst, application, clazz);
-      registry.registerMethodHandle(
-          handle, MethodHandleUse.NOT_ARGUMENT_TO_LAMBDA_METAFACTORY);
-    }
-  }
-
-  @Override
-  public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
-    DexType ownerType = application.getTypeFromName(owner);
-    DexMethod method = application.getMethod(ownerType, name, desc);
-    switch (opcode) {
-      case Opcodes.INVOKEVIRTUAL:
-        registry.registerInvokeVirtual(method);
-        break;
-      case Opcodes.INVOKESTATIC:
-        registry.registerInvokeStatic(method);
-        break;
-      case Opcodes.INVOKEINTERFACE:
-        registry.registerInvokeInterface(method);
-        break;
-      case Opcodes.INVOKESPECIAL:
-        if (name.equals(Constants.INSTANCE_INITIALIZER_NAME) || ownerType == clazz) {
-          registry.registerInvokeDirect(method);
-        } else {
-          registry.registerInvokeSuper(method);
-        }
-        break;
-      default:
-        throw new Unreachable("Unexpected opcode " + opcode);
-    }
-  }
-
-  @Override
-  public void visitFieldInsn(int opcode, String owner, String name, String desc) {
-    DexField field = application.getField(owner, name, desc);
-    switch (opcode) {
-      case Opcodes.GETFIELD:
-        registry.registerInstanceFieldRead(field);
-        break;
-      case Opcodes.PUTFIELD:
-        registry.registerInstanceFieldWrite(field);
-        break;
-      case Opcodes.GETSTATIC:
-        registry.registerStaticFieldRead(field);
-        break;
-      case Opcodes.PUTSTATIC:
-        registry.registerStaticFieldWrite(field);
-        break;
-      default:
-        throw new Unreachable("Unexpected opcode " + opcode);
-    }
-  }
-
-  @Override
-  public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) {
-    registry.registerCallSite(
-        DexCallSite.fromAsmInvokeDynamic(application, clazz, name, desc, bsm, bsmArgs));
-  }
-
-}
diff --git a/src/main/java/com/android/tools/r8/naming/ClassRenamingMapper.java b/src/main/java/com/android/tools/r8/naming/ClassRenamingMapper.java
deleted file mode 100644
index 8609fff..0000000
--- a/src/main/java/com/android/tools/r8/naming/ClassRenamingMapper.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) 2018, 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.naming;
-
-import com.android.tools.r8.utils.BiMapContainer;
-import com.google.common.collect.ImmutableBiMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-import java.util.Map;
-
-/**
- * Provides a translation between class names based on a source and target proguard map.
- *
- * A mapping consists of:
- *
- * <ul>
- *   <li> {@link #translation} a bidirectional mapping between obfuscated names on the source
- *   proguard map to the corresponding class in the target proguard map
- *   <li> {@link #newClasses} a set of the unobfuscated names of classes that are in the source but
- *   not the target map
- *   <li> {@link #unusedNames} a set of names in the target map that are not used by the source map
- * </ul>
- */
-public class ClassRenamingMapper {
-
-  public static ClassRenamingMapper from(ClassNameMapper originalMap, ClassNameMapper targetMap) {
-    ImmutableBiMap.Builder<String, String> translationBuilder = ImmutableBiMap.builder();
-    ImmutableSet.Builder<String> newClasses = ImmutableSet.builder();
-
-    Map<String, String> sourceOriginalToObfuscated =
-        originalMap.getObfuscatedToOriginalMapping().inverse;
-
-    BiMapContainer<String, String> targetMapping = targetMap.getObfuscatedToOriginalMapping();
-    Map<String, String> targetOriginalToObfuscated = targetMapping.inverse;
-
-    for (String originalName : sourceOriginalToObfuscated.keySet()) {
-      String sourceObfuscatedName = sourceOriginalToObfuscated.get(originalName);
-      String targetObfuscatedName = targetOriginalToObfuscated.get(originalName);
-      if (targetObfuscatedName == null) {
-        newClasses.add(originalName);
-        continue;
-      }
-      translationBuilder.put(sourceObfuscatedName, targetObfuscatedName);
-    }
-
-    ImmutableBiMap<String, String> translation = translationBuilder.build();
-    ImmutableSet<String> unusedNames =
-        ImmutableSet.copyOf(Sets.difference(targetMapping.original.keySet(), translation.values()));
-
-    return new ClassRenamingMapper(translation, newClasses.build(), unusedNames);
-  }
-
-  /**
-   * Mapping from obfuscated class names in the source map to their counterpart in the target name
-   * map.
-   */
-  public final ImmutableBiMap<String, String> translation;
-
-  /**
-   * Set of (unobfuscated) class names that are present in the source map but not in the target map.
-   */
-  public final ImmutableSet<String> newClasses;
-
-  /**
-   * Set of (obfuscated) class names that are present in the target map but not in the source map.
-   */
-  public final ImmutableSet<String> unusedNames;
-
-  private ClassRenamingMapper(ImmutableBiMap<String, String> translation,
-      ImmutableSet<String> newClasses, ImmutableSet<String> unusedNames) {
-    this.translation = translation;
-    this.newClasses = newClasses;
-    this.unusedNames = unusedNames;
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder builder = new StringBuilder();
-    builder.append("Translation:\n\n");
-    for (String name : translation.keySet()) {
-      String newName = translation.get(name);
-      builder.append(name.equals(newName) ? "    " : " --- ")
-          .append(name)
-          .append(" -> ")
-          .append(newName)
-          .append('\n');
-    }
-    builder.append("\nNew classes:\n\n");
-    for (String name : newClasses) {
-      builder.append("    ")
-          .append(name)
-          .append('\n');
-    }
-    builder.append("\nUnused names:\n\n");
-    for (String unused : unusedNames) {
-      builder.append("    ")
-          .append(unused)
-          .append('\n');
-    }
-    return builder.toString();
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java b/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java
deleted file mode 100644
index 73f607a..0000000
--- a/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2016, 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.utils;
-
-abstract class SimpleHashMap {
-
-  private int size = 0;  // number of elements in this hash map.
-  private int limit;  // resize when size reaches limit.
-  private int mask;  // length - 1.
-
-  // Constants for capacity.
-  static final int MIN_CAPACITY = 2;
-  static final int DEFAULT_CAPACITY = 50;
-
-  // Constant for loadfactor.
-  static final double MIN_LOAD_FACTOR = 0.2;
-  static final double MAX_LOAD_FACTOR = 0.8;
-  static final double DEFAULT_LOAD_FACTOR = 0.6;
-
-  SimpleHashMap() {
-    this(DEFAULT_CAPACITY);
-  }
-
-  SimpleHashMap(int initialCapacity) {
-    this(initialCapacity, DEFAULT_LOAD_FACTOR);
-  }
-
-  SimpleHashMap(int initialCapacity, double loadFactor) {
-    initialCapacity = Math.max(MIN_CAPACITY, initialCapacity);
-    loadFactor = Math.min(MAX_LOAD_FACTOR, Math.max(MIN_LOAD_FACTOR, loadFactor));
-    final int initialLength = roundToPow2((int) ((double) initialCapacity / loadFactor));
-    initialize(initialLength, (int) ((double) initialLength * loadFactor));
-  }
-
-  public int size() {
-    return size;
-  }
-
-  @Override
-  public String toString() {
-    return this.getClass().getName() + ", " + size + "(length " + length() + ")";
-  }
-
-  int length() {
-    return mask + 1;
-  }
-
-  void initialize(final int length, final int limit) {
-    size = 0;
-    mask = length - 1;
-    this.limit = limit;
-  }
-
-  void resize() {
-    // Double length and limit.
-    initialize(length() << 1, limit << 1);
-  }
-
-  void ensureCapacity() {
-    if (size >= limit) {
-      resize();
-    }
-  }
-
-  void incrementSize() {
-    size++;
-  }
-
-  private int roundToPow2(int number) {
-    number--;
-    number |= number >> 1;
-    number |= number >> 2;
-    number |= number >> 4;
-    number |= number >> 8;
-    number |= number >> 16;
-    return number + 1;
-  }
-
-  int firstProbe(final int hash) {
-    return hash & mask;
-  }
-
-  int nextProbe(final int last, final int index) {
-    return (last + index) & mask;
-  }
-}