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;
- }
-}