Use type conversion utilities from ASM in ClassFileTransformer
Bug: 154678587
Change-Id: I59aecba6fbebf7c14a0b6407c309387841e11279
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 83cbd4d..97d0029 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -217,7 +217,7 @@
// Detach the dead successors from the graph, and record that we need to remove unreachable
// blocks in the end.
- IntList successorIndicesToRemove = new IntArrayList();
+ IntList successorIndicesToRemove = new IntArrayList(numberOfNormalSuccessors);
for (int i = 0; i < numberOfNormalSuccessors; i++) {
if (deadBlockIndices[i] == 1) {
BasicBlock successor = block.getSuccessors().get(i + numberOfExceptionalSuccessors);
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index 5ff1d2a..196091e 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -342,39 +342,9 @@
return className.replace(DESCRIPTOR_PACKAGE_SEPARATOR, JAVA_PACKAGE_SEPARATOR);
}
- public static String getBinaryNameFromDescriptor(String descriptor) {
- int numberOfLeadingSquareBrackets = getNumberOfLeadingSquareBrackets(descriptor);
- if (numberOfLeadingSquareBrackets > 0) {
- assert isClassDescriptor(descriptor.substring(numberOfLeadingSquareBrackets));
- return descriptor.substring(0, numberOfLeadingSquareBrackets)
- + descriptor.substring(numberOfLeadingSquareBrackets + 1, descriptor.length() - 1);
- }
- assert isClassDescriptor(descriptor);
- return descriptor.substring(1, descriptor.length() - 1);
- }
-
- /**
- * Convert an array or a class binary name to a descriptor.
- *
- * @param binaryName binary name i.e. "java/lang/Object" or "Ljava/lang/Object"
- * @return a descriptor i.e. "Ljava/lang/Object;" or "[Ljava/lang/Object;
- */
- public static String getDescriptorFromArrayOrClassBinaryName(String binaryName) {
- assert binaryName != null;
- int numberOfLeadingSquareBrackets = getNumberOfLeadingSquareBrackets(binaryName);
- if (numberOfLeadingSquareBrackets > 0) {
- return binaryName.substring(0, numberOfLeadingSquareBrackets)
- + getDescriptorFromClassBinaryName(binaryName.substring(numberOfLeadingSquareBrackets));
- }
- return getDescriptorFromClassBinaryName(binaryName);
- }
-
- private static int getNumberOfLeadingSquareBrackets(String string) {
- int leadingSquareBrackets = 0;
- while (string.charAt(leadingSquareBrackets) == '[') {
- leadingSquareBrackets++;
- }
- return leadingSquareBrackets;
+ public static String getBinaryNameFromDescriptor(String classDescriptor) {
+ assert isClassDescriptor(classDescriptor);
+ return classDescriptor.substring(1, classDescriptor.length() - 1);
}
/**
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index c386d75..7b0e410 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -5,7 +5,6 @@
import static com.android.tools.r8.references.Reference.classFromTypeName;
import static com.android.tools.r8.utils.DescriptorUtils.getBinaryNameFromDescriptor;
-import static com.android.tools.r8.utils.DescriptorUtils.getDescriptorFromArrayOrClassBinaryName;
import static com.android.tools.r8.utils.StringUtils.replaceAll;
import static org.objectweb.asm.Opcodes.ASM7;
@@ -468,11 +467,7 @@
public void visitFieldInsn(int opcode, String owner, String name, String descriptor) {
super.visitFieldInsn(
opcode,
- getBinaryNameFromDescriptor(
- replaceAll(
- getDescriptorFromArrayOrClassBinaryName(owner),
- oldDescriptor,
- newDescriptor)),
+ rewriteASMInternalTypeName(owner),
name,
replaceAll(descriptor, oldDescriptor, newDescriptor));
}
@@ -493,13 +488,7 @@
int opcode, String owner, String name, String descriptor, boolean isInterface) {
super.visitMethodInsn(
opcode,
- DescriptorUtils.isDescriptor(owner)
- ? replaceAll(owner, oldDescriptor, newDescriptor)
- : getBinaryNameFromDescriptor(
- replaceAll(
- getDescriptorFromArrayOrClassBinaryName(owner),
- oldDescriptor,
- newDescriptor)),
+ rewriteASMInternalTypeName(owner),
name,
replaceAll(descriptor, oldDescriptor, newDescriptor),
isInterface);
@@ -507,15 +496,14 @@
@Override
public void visitTypeInsn(int opcode, String type) {
- super.visitTypeInsn(
- opcode,
- DescriptorUtils.isDescriptor(type)
- ? replaceAll(type, oldDescriptor, newDescriptor)
- : getBinaryNameFromDescriptor(
- replaceAll(
- getDescriptorFromArrayOrClassBinaryName(type),
- oldDescriptor,
- newDescriptor)));
+ super.visitTypeInsn(opcode, rewriteASMInternalTypeName(type));
+ }
+
+ private String rewriteASMInternalTypeName(String type) {
+ return Type.getType(
+ replaceAll(
+ Type.getObjectType(type).getDescriptor(), oldDescriptor, newDescriptor))
+ .getInternalName();
}
});
}