Use retracer for rewriting code
This CL also updated our AssemblyWriter to print the method and arguments.
Bug: b/221855899
Change-Id: I5c5dce3734e8c5fb94dfe9d54a2fef20c23d498c
diff --git a/src/main/java/com/android/tools/r8/cf/CfPrinter.java b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
index 5869f46..65572c8 100644
--- a/src/main/java/com/android/tools/r8/cf/CfPrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
@@ -75,9 +75,8 @@
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.ValueType;
-import com.android.tools.r8.naming.ClassNameMapper;
-import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.objects.Reference2IntMap;
import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap;
@@ -112,7 +111,7 @@
private final List<List<LocalVariableInfo>> localsAtLabel;
private final StringBuilder builder = new StringBuilder();
- private final ClassNameMapper mapper;
+ private final RetracerForCodePrinting retracer;
private int nextInstructionIndex = 0;
private final int instructionIndexSpace;
@@ -121,7 +120,7 @@
public CfPrinter() {
indent = "";
labelToIndex = null;
- mapper = null;
+ retracer = RetracerForCodePrinting.empty();
instructionIndexSpace = 0;
sortedLabels = Collections.emptyList();
@@ -130,12 +129,12 @@
/** Entry for printing a complete code object. */
public CfPrinter(CfCode code) {
- this(code, null, null);
+ this(code, null, RetracerForCodePrinting.empty());
}
/** Entry for printing a complete method object. */
- public CfPrinter(CfCode code, DexEncodedMethod method, ClassNameMapper mapper) {
- this.mapper = mapper;
+ public CfPrinter(CfCode code, DexEncodedMethod method, RetracerForCodePrinting retracer) {
+ this.retracer = retracer;
indent = " ";
instructionIndexSpace = ("" + code.getInstructions().size()).length();
labelToIndex = new Reference2IntOpenHashMap<>();
@@ -770,56 +769,36 @@
}
private void appendDescriptor(DexType type) {
- if (mapper != null) {
- builder.append(DescriptorUtils.javaTypeToDescriptor(mapper.originalNameOf(type)));
- return;
- }
- builder.append(type.toDescriptorString());
+ builder.append(retracer.toDescriptor(type));
}
private void appendType(DexType type) {
if (type.isArrayType() || type.isClassType()) {
appendClass(type);
} else {
- builder.append(type);
+ builder.append(retracer.toDescriptor(type));
}
}
private void appendTypeElement(TypeElement type) {
- builder.append(type.toString());
+ builder.append(type);
}
private void appendClass(DexType type) {
assert type.isArrayType() || type.isClassType();
- if (mapper == null) {
- builder.append(type.getInternalName());
- } else if (type == DexItemFactory.nullValueType) {
+ if (type == DexItemFactory.nullValueType) {
builder.append("NULL");
} else {
- builder.append(
- DescriptorUtils.descriptorToInternalName(
- DescriptorUtils.javaTypeToDescriptor(mapper.originalNameOf(type))));
+ builder.append(retracer.toDescriptor(type));
}
}
private void appendField(DexField field) {
- if (mapper != null) {
- builder.append(mapper.originalSignatureOf(field).toString());
- return;
- }
- appendClass(field.holder);
- builder.append('/').append(field.name);
+ builder.append(retracer.toDescriptor(field));
}
private void appendMethod(DexMethod method) {
- if (mapper != null) {
- MethodSignature signature = mapper.originalSignatureOf(method);
- builder.append(mapper.originalNameOf(method.holder)).append('.');
- builder.append(signature.name).append(signature.toDescriptor());
- return;
- }
- builder.append(method.qualifiedName());
- builder.append(method.proto.toDescriptorString());
+ builder.append(retracer.toDescriptor(method));
}
private String opcodeName(int opcode) {
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConst.java b/src/main/java/com/android/tools/r8/dex/code/DexConst.java
index 33fdff4..c47c264 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConst.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConst.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.SingleConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConst extends DexFormat31i implements SingleConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 8) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 8) + " # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConst16.java b/src/main/java/com/android/tools/r8/dex/code/DexConst16.java
index 1188df2..d676e03 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConst16.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConst16.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.SingleConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConst16 extends DexFormat21s implements SingleConstant {
@@ -44,7 +44,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 4) + " (" + decodedValue() + ")");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConst4.java b/src/main/java/com/android/tools/r8/dex/code/DexConst4.java
index 09ecd15..f1dd41c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConst4.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConst4.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.SingleConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConst4 extends DexFormat11n implements SingleConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + A + ", " + StringUtils.hexString(decodedValue(), 1) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + A + ", " + StringUtils.hexString(decodedValue(), 2) + " # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstHigh16.java b/src/main/java/com/android/tools/r8/dex/code/DexConstHigh16.java
index 2e732ed..82a6aa3 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstHigh16.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstHigh16.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.SingleConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConstHigh16 extends DexFormat21h implements SingleConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 8) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 8) + " # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java
index 87964c8..b909f64 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodHandle.java
@@ -15,7 +15,7 @@
import com.android.tools.r8.graph.UseRegistry.MethodHandleUse;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.StructuralSpecification;
import java.nio.ShortBuffer;
@@ -58,12 +58,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java
index 68f49fb..15bee8c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstMethodType.java
@@ -14,7 +14,7 @@
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.StructuralSpecification;
import java.nio.ShortBuffer;
@@ -57,12 +57,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstString.java b/src/main/java/com/android/tools/r8/dex/code/DexConstString.java
index 0117785..e143d89 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstString.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstString.java
@@ -13,7 +13,7 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.StructuralSpecification;
import java.nio.ShortBuffer;
@@ -75,12 +75,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstStringJumbo.java b/src/main/java/com/android/tools/r8/dex/code/DexConstStringJumbo.java
index 725ef8a..e1811ba 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstStringJumbo.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstStringJumbo.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
public class DexConstStringJumbo extends DexFormat31c {
@@ -52,12 +52,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", \"" + BBBBBBBB.toString() + "\"");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", \"" + BBBBBBBB.toString() + "\"");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstWide.java b/src/main/java/com/android/tools/r8/dex/code/DexConstWide.java
index 6fbd6f2..899e221 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstWide.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstWide.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.WideConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConstWide extends DexFormat51l implements WideConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + "L # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstWide16.java b/src/main/java/com/android/tools/r8/dex/code/DexConstWide16.java
index e30b886..2cd5ae3 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstWide16.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstWide16.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.WideConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConstWide16 extends DexFormat21s implements WideConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + "L # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstWide32.java b/src/main/java/com/android/tools/r8/dex/code/DexConstWide32.java
index b315cb9..9797a19 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstWide32.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstWide32.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.WideConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConstWide32 extends DexFormat31i implements WideConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + " # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexConstWideHigh16.java b/src/main/java/com/android/tools/r8/dex/code/DexConstWideHigh16.java
index 0eeca93..93b7f34 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexConstWideHigh16.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexConstWideHigh16.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.WideConstant;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
public class DexConstWideHigh16 extends DexFormat21h implements WideConstant {
@@ -44,13 +44,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + " (" + decodedValue() + ")");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", " + StringUtils.hexString(decodedValue(), 16) + "L # " + decodedValue());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFillArrayData.java b/src/main/java/com/android/tools/r8/dex/code/DexFillArrayData.java
index de478d7..0a3974d 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFillArrayData.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFillArrayData.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.dex.code;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
public class DexFillArrayData extends DexFormat31t {
@@ -41,7 +41,7 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", :label_" + (getOffset() + BBBBBBBB));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFillArrayDataPayload.java b/src/main/java/com/android/tools/r8/dex/code/DexFillArrayDataPayload.java
index 67d796c..228258d 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFillArrayDataPayload.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFillArrayDataPayload.java
@@ -8,7 +8,7 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
@@ -91,8 +91,8 @@
}
@Override
- public String toString(ClassNameMapper naming) {
- return super.toString(naming)
+ public String toString(RetracerForCodePrinting retracer) {
+ return super.toString(retracer)
+ "[FillArrayPayload], "
+ "width: "
+ element_width
@@ -101,7 +101,7 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
builder.append(" ");
builder.append(".array-data ");
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java
index ba9065a..ba29cbe 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat10t.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import java.nio.ShortBuffer;
@@ -56,12 +56,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(formatRelativeOffset(AA));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(":label_" + (getOffset() + AA));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java
index 3cb41fb..174c89b 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat10x.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import java.nio.ShortBuffer;
abstract class DexFormat10x extends DexBase1Format {
@@ -33,12 +33,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(null);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(null);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java
index fe02384..09e3fb6 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat11n.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -70,7 +70,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + A + ", #" + B);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java
index b07478c..393ab88 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat11x.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import java.nio.ShortBuffer;
@@ -56,12 +56,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java
index 633837d..979bcc7 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat12x.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -64,12 +64,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + A + ", v" + B);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + A + ", v" + B);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java
index 0c0e15e..a03b9c5 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat20t.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import java.nio.ShortBuffer;
@@ -56,12 +56,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("" + AAAA + " " + formatRelativeOffset(AAAA));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(":label_" + (getOffset() + AAAA));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21c.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21c.java
index b47c6d7..4d25775 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21c.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21c.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.graph.IndexedDexItem;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -52,13 +52,12 @@
abstract void internalSubSpecify(StructuralSpecification<DexFormat21c<T>, ?> spec);
@Override
- public String toString(ClassNameMapper naming) {
- return formatString(
- "v" + AA + ", " + (naming == null ? BBBB.toString() : naming.originalNameOf(BBBB)));
+ public String toString(RetracerForCodePrinting retracer) {
+ return formatString("v" + AA + ", " + retracer.toDescriptor(BBBB));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
// TODO(sgjesse): Add support for smali name mapping.
return formatSmaliString("v" + AA + ", " + BBBB.toSmaliString());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java
index 97e3529..3d66ad2 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21s.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
@@ -67,12 +67,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", #" + BBBB);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", " + StringUtils.hexString(BBBB, 4) + " # " + BBBB);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
index 1c80b33..93cd025 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
@@ -13,7 +13,7 @@
import com.android.tools.r8.ir.code.ValueTypeConstraint;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -85,12 +85,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", " + formatRelativeOffset(BBBB));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", :label_" + (getOffset() + BBBB));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java
index 687d7e7..222fc09 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22b.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
@@ -71,12 +71,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", v" + BB + ", #" + CC);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + AA + ", v" + BB + ", " + StringUtils.hexString(CC, 2) + " # " + CC);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22c.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22c.java
index 2e1246c..68c7839 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22c.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22c.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.IndexedDexItem;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -57,13 +57,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
- return formatString(
- "v" + A + ", v" + B + ", " + (naming == null ? CCCC : naming.originalNameOf(CCCC)));
+ public String toString(RetracerForCodePrinting retracer) {
+ return formatString("v" + A + ", v" + B + ", " + retracer.toDescriptor(CCCC));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
// TODO(sgjesse): Add support for smali name mapping.
return formatSmaliString("v" + A + ", v" + B + ", " + CCCC.toSmaliString());
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java
index e503467..53d247c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22s.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
@@ -71,12 +71,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + A + ", v" + B + ", #" + CCCC);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(
"v" + A + ", v" + B + ", " + StringUtils.hexString(CCCC, 4) + " # " + CCCC);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
index 17695d7..c276ca1 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
@@ -13,7 +13,7 @@
import com.android.tools.r8.ir.code.ValueTypeConstraint;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -89,12 +89,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + A + ", v" + B + ", " + formatRelativeOffset(CCCC));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + A + ", v" + B + ", :label_" + (getOffset() + CCCC));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java
index 3c34540..3cd881d 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22x.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -66,12 +66,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", v" + (int) BBBB);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", v" + (int) BBBB);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java
index df098d9..1e1b130 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat23x.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -70,12 +70,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", v" + BB + ", v" + CC);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", v" + BB + ", v" + CC);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java
index aa744ad..cfd2bf7 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat30t.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import java.nio.ShortBuffer;
@@ -55,12 +55,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString(formatOffset(AAAAAAAA));
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString(":label_" + (getOffset() + AAAAAAAA));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java
index 8023664..ae0ca6c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat31c.java
@@ -13,7 +13,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -69,9 +69,8 @@
}
@Override
- public String toString(ClassNameMapper naming) {
- return formatString(
- "v" + AA + ", " + (naming == null ? BBBBBBBB : naming.originalNameOf(BBBBBBBB)));
+ public String toString(RetracerForCodePrinting retracer) {
+ return formatString("v" + AA + ", " + retracer.toDescriptor(BBBBBBBB));
}
@Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java
index 0795a92..942c5e2 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat31i.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -65,7 +65,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", #" + BBBBBBBB);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java
index 320514d..7f26c21 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat31t.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -80,7 +80,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", " + formatRelativeOffset(BBBBBBBB));
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java
index 00cf1f4..5389c2f 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat32x.java
@@ -11,7 +11,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -68,12 +68,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AAAA + ", v" + BBBB);
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AAAA + ", v" + BBBB);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat35c.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat35c.java
index 6e40c73..0f195c1 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat35c.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat35c.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.graph.IndexedDexItem;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralItem;
@@ -94,20 +94,16 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterArguments(builder, " ");
builder.append(" ");
- if (naming == null) {
- builder.append(BBBB.toSmaliString());
- } else {
- builder.append(naming.originalNameOf(BBBB));
- }
+ builder.append(retracer.toDescriptor(BBBB));
return formatString(builder.toString());
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterArguments(builder, ", ");
builder.append(", ");
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat3rc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat3rc.java
index b0c0204..3d8289c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat3rc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat3rc.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.graph.IndexedDexItem;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralItem;
@@ -71,20 +71,16 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterRange(builder);
builder.append(" ");
- if (naming == null) {
- builder.append(BBBB.toSmaliString());
- } else {
- builder.append(naming.originalNameOf(BBBB));
- }
+ builder.append(retracer.toDescriptor(BBBB));
return formatString(builder.toString());
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterRange(builder);
builder.append(", ");
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
index 61a0257..2f4adc5 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
@@ -11,12 +11,11 @@
import com.android.tools.r8.graph.DexProto;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
-import com.android.tools.r8.graph.IndexedDexItem;
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.Invoke.Type;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -137,7 +136,7 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterArguments(builder, ", ");
builder.append(", ");
@@ -149,26 +148,16 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterArguments(builder, " ");
builder.append(" ");
- builder.append(itemToString(BBBB, naming));
+ builder.append(retracer.toDescriptor(BBBB));
builder.append(", ");
- builder.append(itemToString(HHHH, naming));
+ builder.append(retracer.toDescriptor(HHHH));
return formatString(builder.toString());
}
- private String itemToString(IndexedDexItem indexedDexItem, ClassNameMapper naming) {
- String str;
- if (naming == null) {
- str = indexedDexItem.toSmaliString();
- } else {
- str = naming.originalNameOf(indexedDexItem);
- }
- return str;
- }
-
private void appendRegisterArguments(StringBuilder builder, String separator) {
builder.append("{ ");
int[] values = new int[] {C, D, E, F, G};
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
index b795316..8aa065a 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
@@ -15,7 +15,7 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.Invoke.Type;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -90,25 +90,17 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterRange(builder);
builder.append(" ");
- if (naming == null) {
- builder.append(BBBB.toSmaliString());
- } else {
- builder.append(naming.originalNameOf(BBBB));
- }
- if (naming == null) {
- builder.append(HHHH.toSmaliString());
- } else {
- builder.append(naming.originalNameOf(HHHH));
- }
+ builder.append(retracer.toDescriptor(BBBB));
+ builder.append(retracer.toDescriptor(HHHH));
return formatString(builder.toString());
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
appendRegisterRange(builder);
builder.append(", ");
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java
index 30ddee5..ddce5ad 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat51l.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -65,7 +65,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
return formatString("v" + AA + ", #" + BBBBBBBBBBBBBBBB);
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java b/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java
index c600656..8591fd9 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInitClass.java
@@ -16,7 +16,7 @@
import com.android.tools.r8.ir.code.FieldMemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -144,18 +144,12 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + dest + ", " + clazz.toSmaliString());
}
@Override
- public String toString(ClassNameMapper naming) {
- StringBuilder builder = new StringBuilder("v").append(dest).append(", ");
- if (naming == null) {
- builder.append(clazz.toSourceString());
- } else {
- builder.append(naming.originalNameOf(clazz));
- }
- return formatString(builder.toString());
+ public String toString(RetracerForCodePrinting retracer) {
+ return formatString("v" + dest + ", " + retracer.toDescriptor(clazz));
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java b/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java
index d5f8183..94812b4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInstruction.java
@@ -19,7 +19,7 @@
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.Equatable;
@@ -372,15 +372,15 @@
throw new InternalCompilerError("Instruction " + payloadUser + " is not a payload user");
}
- public abstract String toSmaliString(ClassNameMapper naming);
+ public abstract String toSmaliString(RetracerForCodePrinting retracer);
public String toSmaliString() {
- return toSmaliString((ClassNameMapper) null);
+ return toSmaliString((RetracerForCodePrinting) null);
}
- public abstract String toString(ClassNameMapper naming);
+ public abstract String toString(RetracerForCodePrinting retracer);
- public String toString(ClassNameMapper naming, DexInstruction payloadUser) {
+ public String toString(RetracerForCodePrinting retracer, DexInstruction payloadUser) {
throw new InternalCompilerError("Instruction " + payloadUser + " is not a payload user");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java b/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java
index d34a783..ddaf074 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexItemBasedConstString.java
@@ -13,8 +13,8 @@
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.naming.dexitembasedstring.NameComputationInfo;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.StructuralSpecification;
import java.nio.ShortBuffer;
@@ -85,13 +85,13 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
// TODO(christofferqa): Apply mapping to item.
return formatString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
// TODO(christofferqa): Apply mapping to item.
return formatSmaliString("v" + AA + ", \"" + BBBB.toString() + "\"");
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitch.java b/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitch.java
index 34029d8..c00a3b4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitch.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitch.java
@@ -5,7 +5,7 @@
package com.android.tools.r8.dex.code;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
public class DexPackedSwitch extends DexFormat31t {
@@ -50,7 +50,7 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", :label_" + (getOffset() + BBBBBBBB));
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitchPayload.java b/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitchPayload.java
index d06f619..95f6eed 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitchPayload.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexPackedSwitchPayload.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
@@ -102,12 +102,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
- return toString(naming, null);
+ public String toString(RetracerForCodePrinting retracer) {
+ return toString(retracer, null);
}
@Override
- public String toString(ClassNameMapper naming, DexInstruction payloadUser) {
+ public String toString(RetracerForCodePrinting retracer, DexInstruction payloadUser) {
StringBuilder builder = new StringBuilder("[PackedSwitchPayload");
if (payloadUser == null) {
builder.append(" offsets relative to associated PackedSwitch");
@@ -123,7 +123,7 @@
}
StringUtils.appendLeftPadded(builder, (first_key + i) + " -> " + offsetString + "\n", 20);
}
- return super.toString(naming) + builder.toString();
+ return super.toString(retracer) + builder.toString();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java b/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java
index 955f67e..3101663 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexRecordFieldValues.java
@@ -13,7 +13,7 @@
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -100,7 +100,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(RetracerForCodePrinting retracer) {
StringBuilder sb = new StringBuilder();
sb.append("v").append(outRegister).append(" ");
appendArguments(sb);
@@ -108,8 +108,8 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
- return toString(naming);
+ public String toSmaliString(RetracerForCodePrinting retracer) {
+ return toString(retracer);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitch.java b/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitch.java
index 4f15ab7..8dfabb6 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitch.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitch.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.dex.code;
import com.android.tools.r8.ir.conversion.IRBuilder;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
public class DexSparseSwitch extends DexFormat31t {
@@ -49,7 +49,7 @@
}
@Override
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
return formatSmaliString("v" + AA + ", :label_" + (getOffset() + BBBBBBBB));
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitchPayload.java b/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitchPayload.java
index 97d369a..838e4ea 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitchPayload.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexSparseSwitchPayload.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.graph.ObjectToOffsetMapping;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
-import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
@@ -108,12 +108,12 @@
}
@Override
- public String toString(ClassNameMapper naming) {
- return toString(naming, null);
+ public String toString(RetracerForCodePrinting retracer) {
+ return toString(retracer, null);
}
@Override
- public String toString(ClassNameMapper naming, DexInstruction payloadUser) {
+ public String toString(RetracerForCodePrinting retracer, DexInstruction payloadUser) {
StringBuilder builder = new StringBuilder("[SparseSwitchPayload");
if (payloadUser == null) {
builder.append(" offsets relative to associated SparseSwitch");
@@ -129,7 +129,7 @@
}
StringUtils.appendLeftPadded(builder, keys[i] + " -> " + offsetString + "\n", 20);
}
- return super.toString(naming) + builder.toString();
+ return super.toString(retracer) + builder.toString();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
index 3061f1b..b117cce 100644
--- a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
@@ -12,11 +12,12 @@
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
import com.android.tools.r8.kotlin.Kotlin;
import com.android.tools.r8.kotlin.KotlinMetadataWriter;
-import com.android.tools.r8.naming.ClassNameMapper;
-import com.android.tools.r8.naming.MemberNaming.FieldSignature;
import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
import com.android.tools.r8.utils.CfgPrinter;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.StringUtils.BraceType;
import com.android.tools.r8.utils.Timing;
import java.io.BufferedReader;
import java.io.PrintStream;
@@ -34,6 +35,7 @@
private final Kotlin kotlin;
private final Timing timing = new Timing("AssemblyWriter");
private final CompilationContext compilationContext;
+ private final RetracerForCodePrinting retracer;
public AssemblyWriter(
DexApplication application,
@@ -62,6 +64,8 @@
this.appInfo = null;
}
kotlin = new Kotlin(application.dexItemFactory);
+ retracer =
+ RetracerForCodePrinting.create(application.getProguardMap(), application.options.reporter);
}
public static String getFileEnding() {
@@ -70,22 +74,17 @@
@Override
void writeClassHeader(DexProgramClass clazz, PrintStream ps) {
- String clazzName;
- if (application.getProguardMap() != null) {
- clazzName = application.getProguardMap().originalNameOf(clazz.type);
- } else {
- clazzName = clazz.type.toSourceString();
- }
+ String clazzName = retracer.toSourceString(clazz.getType());
ps.println("# Bytecode for");
ps.println("# Class: '" + clazzName + "'");
if (writeAllClassInfo) {
writeAnnotations(clazz, clazz.annotations(), ps);
ps.println("# Flags: '" + clazz.accessFlags + "'");
if (clazz.superType != application.dexItemFactory.objectType) {
- ps.println("# Extends: '" + clazz.superType.toSourceString() + "'");
+ ps.println("# Extends: '" + retracer.toSourceString(clazz.superType) + "'");
}
for (DexType value : clazz.interfaces.values) {
- ps.println("# Implements: '" + value.toSourceString() + "'");
+ ps.println("# Implements: '" + retracer.toSourceString(value) + "'");
}
if (!clazz.getInnerClasses().isEmpty()) {
ps.println("# InnerClasses:");
@@ -93,10 +92,10 @@
ps.println(
"# Outer: "
+ (innerClassAttribute.getOuter() != null
- ? innerClassAttribute.getOuter().toSourceString()
+ ? retracer.toSourceString(innerClassAttribute.getOuter())
: "-")
+ ", inner: "
- + innerClassAttribute.getInner().toSourceString()
+ + retracer.toSourceString(innerClassAttribute.getInner())
+ ", inner name: "
+ innerClassAttribute.getInnerName()
+ ", access: "
@@ -107,10 +106,12 @@
if (enclosingMethodAttribute != null) {
ps.println("# EnclosingMethod:");
if (enclosingMethodAttribute.getEnclosingClass() != null) {
- ps.println("# Class: " + enclosingMethodAttribute.getEnclosingClass().toSourceString());
+ ps.println(
+ "# Class: " + retracer.toSourceString(enclosingMethodAttribute.getEnclosingClass()));
} else {
ps.println(
- "# Method: " + enclosingMethodAttribute.getEnclosingMethod().toSourceString());
+ "# Method: "
+ + retracer.toSourceString(enclosingMethodAttribute.getEnclosingMethod()));
}
}
}
@@ -129,14 +130,9 @@
@Override
void writeField(DexEncodedField field, PrintStream ps) {
if (writeFields) {
- ClassNameMapper naming = application.getProguardMap();
- FieldSignature fieldSignature =
- naming != null
- ? naming.originalSignatureOf(field.getReference())
- : FieldSignature.fromDexField(field.getReference());
writeAnnotations(null, field.annotations(), ps);
ps.print(field.accessFlags + " ");
- ps.print(fieldSignature);
+ ps.print(retracer.toSourceString(field.getReference()));
if (field.isStatic() && field.hasExplicitStaticValue()) {
ps.print(" = " + field.getStaticValue());
}
@@ -152,13 +148,8 @@
@Override
void writeMethod(ProgramMethod method, PrintStream ps) {
DexEncodedMethod definition = method.getDefinition();
- ClassNameMapper naming = application.getProguardMap();
- String methodName =
- naming != null
- ? naming.originalSignatureOf(method.getReference()).name
- : method.getReference().name.toString();
ps.println("#");
- ps.println("# Method: '" + methodName + "':");
+ ps.println("# Method: '" + retracer.toSourceString(definition.getReference()) + "':");
writeAnnotations(null, definition.annotations(), ps);
ps.println("# " + definition.accessFlags);
ps.println("#");
@@ -171,7 +162,7 @@
if (writeIR) {
writeIR(method, ps);
} else {
- ps.println(code.toString(definition, naming));
+ ps.println(code.toString(definition, retracer));
}
}
}
@@ -188,7 +179,7 @@
OptimizationFeedbackIgnore.getInstance(),
methodProcessor,
methodProcessingContext));
- ps.println(printer.toString());
+ ps.println(printer);
}
private void writeAnnotations(
@@ -202,9 +193,19 @@
assert clazz != null : "Kotlin metadata is a class annotation";
KotlinMetadataWriter.writeKotlinMetadataAnnotation(prefix, annotation, ps, kotlin);
} else {
- String annotationString = annotation.toString();
+ StringBuilder sb = new StringBuilder();
+ sb.append(annotation.getVisibility());
+ sb.append(" ");
+ sb.append(retracer.toSourceString(annotation.getAnnotationType()));
+ sb.append(
+ StringUtils.join(
+ ",",
+ annotation.annotation.elements,
+ element ->
+ element.getName().toString() + " = " + getStringValue(element.getValue()),
+ BraceType.SQUARE));
ps.print(
- new BufferedReader(new StringReader(annotationString))
+ new BufferedReader(new StringReader(sb.toString()))
.lines()
.collect(
Collectors.joining(
@@ -215,6 +216,26 @@
}
}
+ private String getStringValue(DexValue value) {
+ if (value.isDexValueType()) {
+ return retracer.toSourceString(value.asDexValueType().getValue());
+ } else if (value.isDexValueMethodHandle()) {
+ return retracer.toSourceString(value.asDexValueMethodHandle().value.asMethod());
+ } else if (value.isDexValueMethod()) {
+ return retracer.toSourceString(value.asDexValueMethod().value);
+ } else if (value.isDexItemBasedValueString()) {
+ return retracer.toSourceString(value.asDexItemBasedValueString().value);
+ } else if (value.isDexValueEnum()) {
+ return retracer.toSourceString(value.asDexValueEnum().value);
+ } else if (value.isDexValueField()) {
+ return retracer.toSourceString(value.asDexValueField().value);
+ } else if (value.isDexValueArray()) {
+ return "[" + value.asDexValueArray() + "]";
+ } else {
+ return value.toString();
+ }
+ }
+
@Override
void writeClassFooter(DexProgramClass clazz, PrintStream ps) {
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index f415e4b..63d7d65 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -38,11 +38,11 @@
import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
import com.android.tools.r8.ir.optimize.InliningConstraints;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.StructuralItem;
@@ -783,8 +783,8 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
- return new CfPrinter(this, method, naming).toString();
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
+ return new CfPrinter(this, method, retracer).toString();
}
public ConstraintWithTarget computeInliningConstraint(
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 0edeb6f..1077fb9 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -13,8 +13,8 @@
import com.android.tools.r8.ir.code.NumberGenerator;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
public abstract class Code extends CachedHashValueDexItem {
@@ -71,7 +71,7 @@
@Override
public abstract String toString();
- public abstract String toString(DexEncodedMethod method, ClassNameMapper naming);
+ public abstract String toString(DexEncodedMethod method, RetracerForCodePrinting retracer);
public boolean isCfCode() {
return false;
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 425c5d5..165ff81 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -28,10 +28,10 @@
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.conversion.SyntheticStraightLineSourceCode;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.IteratorUtils;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.google.common.collect.ImmutableList;
import java.nio.ShortBuffer;
@@ -391,7 +391,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return toString();
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexAnnotation.java b/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
index 924590f..aff4bff 100644
--- a/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
+++ b/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
@@ -101,6 +101,10 @@
return visibility + " " + annotation;
}
+ public int getVisibility() {
+ return visibility;
+ }
+
public void collectIndexedItems(AppView<?> appView, IndexedItemCollection indexedItems) {
annotation.collectIndexedItems(appView, indexedItems);
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexAnnotationElement.java b/src/main/java/com/android/tools/r8/graph/DexAnnotationElement.java
index a2be262..aa6aaec 100644
--- a/src/main/java/com/android/tools/r8/graph/DexAnnotationElement.java
+++ b/src/main/java/com/android/tools/r8/graph/DexAnnotationElement.java
@@ -71,4 +71,7 @@
assert false;
}
+ public DexString getName() {
+ return name;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index ad59604..3d7892f 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -27,9 +27,9 @@
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.ArrayUtils;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.structural.Equatable;
import com.android.tools.r8.utils.structural.HashCodeVisitor;
@@ -449,11 +449,11 @@
@Override
public String toString() {
- return toString(null, null);
+ return toString(null, RetracerForCodePrinting.empty());
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
if (method != null) {
builder.append(method.toSourceString()).append("\n");
@@ -495,9 +495,9 @@
builder.append(": ");
if (insn.isSwitchPayload()) {
DexInstruction payloadUser = payloadUsers.get(insn.getOffset());
- builder.append(insn.toString(naming, payloadUser));
+ builder.append(insn.toString(retracer, payloadUser));
} else {
- builder.append(insn.toString(naming));
+ builder.append(insn.toString(retracer));
}
builder.append('\n');
}
@@ -542,7 +542,7 @@
return current;
}
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
// Find labeled targets.
Map<Integer, DexInstruction> payloadUsers = new HashMap<>();
@@ -582,7 +582,7 @@
DexInstruction payloadUser = payloadUsers.get(dex.getOffset());
builder.append(dex.toSmaliString(payloadUser)).append('\n');
} else {
- builder.append(dex.toSmaliString(naming)).append('\n');
+ builder.append(dex.toSmaliString(retracer)).append('\n');
}
}
if (tries.length > 0) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 985e215..318b353 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -56,7 +56,6 @@
import com.android.tools.r8.ir.optimize.inliner.WhyAreYouNotInliningReporter;
import com.android.tools.r8.ir.synthetic.ForwardMethodBuilder;
import com.android.tools.r8.kotlin.KotlinMethodLevelInfo;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.naming.MemberNaming.Signature;
import com.android.tools.r8.naming.NamingLens;
@@ -65,6 +64,7 @@
import com.android.tools.r8.utils.ConsumerUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.OptionalBool;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.CompareToVisitor;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.android.tools.r8.utils.structural.Ordered;
@@ -902,7 +902,7 @@
this.parameterAnnotationsList = parameterAnnotations;
}
- public String toSmaliString(ClassNameMapper naming) {
+ public String toSmaliString(RetracerForCodePrinting naming) {
checkIfObsolete();
StringBuilder builder = new StringBuilder();
builder.append(".method ");
@@ -1226,7 +1226,7 @@
public String codeToString() {
checkIfObsolete();
- return code == null ? "<no code>" : code.toString(this, null);
+ return code == null ? "<no code>" : code.toString(this, RetracerForCodePrinting.empty());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexType.java b/src/main/java/com/android/tools/r8/graph/DexType.java
index 36c45bc..e0e2bd6 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.structural.CompareToVisitor;
@@ -56,6 +57,10 @@
return Reference.classFromDescriptor(toDescriptorString());
}
+ public TypeReference asTypeReference() {
+ return Reference.typeFromDescriptor(toDescriptorString());
+ }
+
public DynamicTypeWithUpperBound toDynamicType(AppView<AppInfoWithLiveness> appView) {
return toDynamicType(appView, Nullability.maybeNull());
}
diff --git a/src/main/java/com/android/tools/r8/graph/InvalidCode.java b/src/main/java/com/android/tools/r8/graph/InvalidCode.java
index 2b9de26..b3016c9 100644
--- a/src/main/java/com/android/tools/r8/graph/InvalidCode.java
+++ b/src/main/java/com/android/tools/r8/graph/InvalidCode.java
@@ -6,8 +6,8 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
public class InvalidCode extends Code {
@@ -48,7 +48,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
StringBuilder builder = new StringBuilder();
if (method != null) {
builder.append(method.toSourceString()).append("\n");
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index d18e823..3ab128b 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -63,7 +63,6 @@
import com.android.tools.r8.ir.code.Position.SourcePosition;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.position.MethodPosition;
import com.android.tools.r8.position.TextPosition;
@@ -74,6 +73,7 @@
import com.android.tools.r8.utils.ExceptionUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Reporter;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringDiagnostic;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
@@ -295,8 +295,8 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
- return asCfCode().toString(method, naming);
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
+ return asCfCode().toString(method, retracer);
}
protected BiFunction<String, String, LazyCfCode> createCodeLocator(ReparseContext context) {
diff --git a/src/main/java/com/android/tools/r8/graph/SmaliWriter.java b/src/main/java/com/android/tools/r8/graph/SmaliWriter.java
index edf7d58..0eff9d1 100644
--- a/src/main/java/com/android/tools/r8/graph/SmaliWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/SmaliWriter.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.Timing;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -31,7 +32,7 @@
} catch (IOException e) {
throw new CompilationError("Failed to generate smali sting", e);
}
- return new String(os.toByteArray(), StandardCharsets.UTF_8);
+ return os.toString(StandardCharsets.UTF_8);
}
public static String getFileEnding() {
@@ -67,7 +68,12 @@
@Override
void writeMethod(ProgramMethod method, PrintStream ps) {
ps.append("\n");
- ps.append(method.getDefinition().toSmaliString(application.getProguardMap()));
+ ps.append(
+ method
+ .getDefinition()
+ .toSmaliString(
+ RetracerForCodePrinting.create(
+ application.getProguardMap(), application.options.reporter)));
ps.append("\n");
}
diff --git a/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java b/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
index 789bb19..dc18cfe 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowExceptionCode.java
@@ -19,8 +19,8 @@
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.HashingVisitor;
import java.nio.ShortBuffer;
import java.util.Objects;
@@ -237,7 +237,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return "ThrowExceptionCode";
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
index cac6f7a..661cefb 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
@@ -22,9 +22,9 @@
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.conversion.SyntheticStraightLineSourceCode;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.structural.HashingVisitor;
import com.google.common.collect.ImmutableList;
import java.nio.ShortBuffer;
@@ -266,7 +266,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return "ThrowNullCode";
}
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java
index c9c8e34..abb1fbf 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java
@@ -15,8 +15,8 @@
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
public abstract class IncompleteHorizontalClassMergerCode extends Code {
@@ -80,7 +80,7 @@
public abstract String toString();
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return toString();
}
}
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java
index 2e6cc06..6a030d7 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java
@@ -35,11 +35,11 @@
import com.android.tools.r8.ir.code.Position.SyntheticPosition;
import com.android.tools.r8.ir.code.Return;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.CfVersionUtils;
import com.android.tools.r8.utils.IterableUtils;
import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import java.util.ArrayList;
@@ -311,7 +311,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
throw new Unreachable();
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java
index 2cab3fb..4a99fb4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java
@@ -66,12 +66,12 @@
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
import com.android.tools.r8.ir.optimize.outliner.OutlineCollection;
import com.android.tools.r8.ir.optimize.outliner.Outliner;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.InternalOptions.OutlineOptions;
import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.StringUtils.BraceType;
import com.android.tools.r8.utils.ThreadUtils;
@@ -1830,7 +1830,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return null;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java
index 6e187ae..4e7801c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java
@@ -19,9 +19,9 @@
import com.android.tools.r8.ir.code.Return;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.optimize.enums.EnumUnboxerImpl;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.IteratorUtils;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
/**
* A special code object used by enum unboxing that supplies IR from an existing method
@@ -128,7 +128,7 @@
}
@Override
- public String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return toString();
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
index 8c28b9e..ad0b54c 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
@@ -21,8 +21,8 @@
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.conversion.SourceCode;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.RetracerForCodePrinting;
import java.util.function.Consumer;
public abstract class AbstractSynthesizedCode extends Code {
@@ -73,7 +73,7 @@
@Override
public final String toString() {
- return toString(null, null);
+ return toString(null, RetracerForCodePrinting.empty());
}
@Override
@@ -101,7 +101,7 @@
}
@Override
- public final String toString(DexEncodedMethod method, ClassNameMapper naming) {
+ public final String toString(DexEncodedMethod method, RetracerForCodePrinting retracer) {
return this.getClass().getSimpleName();
}
diff --git a/src/main/java/com/android/tools/r8/references/FieldReference.java b/src/main/java/com/android/tools/r8/references/FieldReference.java
index dab6fd8..90f4b91 100644
--- a/src/main/java/com/android/tools/r8/references/FieldReference.java
+++ b/src/main/java/com/android/tools/r8/references/FieldReference.java
@@ -65,6 +65,14 @@
@Override
public String toString() {
- return getHolderClass().toString() + getFieldName() + ":" + getFieldType().getDescriptor();
+ return getHolderClass() + getFieldName() + ":" + getFieldType().getDescriptor();
+ }
+
+ public String toSourceString() {
+ return getFieldType().getTypeName()
+ + " "
+ + getHolderClass().getTypeName()
+ + "."
+ + getFieldName();
}
}
diff --git a/src/main/java/com/android/tools/r8/references/MethodReference.java b/src/main/java/com/android/tools/r8/references/MethodReference.java
index 5ef8596..3339916 100644
--- a/src/main/java/com/android/tools/r8/references/MethodReference.java
+++ b/src/main/java/com/android/tools/r8/references/MethodReference.java
@@ -5,7 +5,6 @@
import com.android.tools.r8.Keep;
import com.android.tools.r8.KeepForRetraceApi;
-import com.android.tools.r8.utils.ListUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.StringUtils.BraceType;
import java.util.List;
@@ -78,8 +77,7 @@
}
public String getMethodDescriptor() {
- return StringUtils.join(
- "", ListUtils.map(getFormalTypes(), TypeReference::getDescriptor), BraceType.PARENS)
+ return StringUtils.join("", getFormalTypes(), TypeReference::getDescriptor, BraceType.PARENS)
+ (getReturnType() == null ? "V" : getReturnType().getDescriptor());
}
@@ -87,4 +85,16 @@
public String toString() {
return getHolderClass() + getMethodName() + getMethodDescriptor();
}
+
+ public String toSourceString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(returnType == null ? "void" : returnType.getTypeName());
+ sb.append(" ");
+ sb.append(holderClass.getTypeName());
+ sb.append(".");
+ sb.append(methodName);
+ sb.append(
+ StringUtils.join(", ", getFormalTypes(), TypeReference::getTypeName, BraceType.PARENS));
+ return sb.toString();
+ }
}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java b/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java
index 99e85be..5e6b29b 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java
@@ -12,6 +12,8 @@
String getTypeName();
+ String getDescriptor();
+
String getBinaryName();
RetracedTypeReference getRetracedType();
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassReferenceImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassReferenceImpl.java
index ef23ef1..d036009 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassReferenceImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassReferenceImpl.java
@@ -26,6 +26,11 @@
}
@Override
+ public String getDescriptor() {
+ return classReference.getDescriptor();
+ }
+
+ @Override
public String getBinaryName() {
return classReference.getBinaryName();
}
diff --git a/src/main/java/com/android/tools/r8/utils/RetracerForCodePrinting.java b/src/main/java/com/android/tools/r8/utils/RetracerForCodePrinting.java
new file mode 100644
index 0000000..821be94
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/RetracerForCodePrinting.java
@@ -0,0 +1,175 @@
+// Copyright (c) 2022, 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;
+
+import com.android.tools.r8.DiagnosticsHandler;
+import com.android.tools.r8.graph.DexField;
+import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexReference;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.IndexedDexItem;
+import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.references.FieldReference;
+import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.retrace.RetraceClassElement;
+import com.android.tools.r8.retrace.RetraceElement;
+import com.android.tools.r8.retrace.RetraceFrameResult;
+import com.android.tools.r8.retrace.RetraceResult;
+import com.android.tools.r8.retrace.RetraceStackTraceContext;
+import com.android.tools.r8.retrace.RetracedFieldReference;
+import com.android.tools.r8.retrace.RetracedFieldReference.KnownRetracedFieldReference;
+import com.android.tools.r8.retrace.RetracedMethodReference;
+import com.android.tools.r8.retrace.RetracedMethodReference.KnownRetracedMethodReference;
+import com.android.tools.r8.retrace.Retracer;
+import com.android.tools.r8.retrace.internal.MappingSupplierInternalImpl;
+import com.android.tools.r8.retrace.internal.RetracerImpl;
+import java.util.OptionalInt;
+import java.util.function.Function;
+
+public class RetracerForCodePrinting {
+
+ private static final RetracerForCodePrinting EMPTY = new RetracerForCodePrinting(null);
+
+ public static RetracerForCodePrinting empty() {
+ return EMPTY;
+ }
+
+ private final Retracer retracer;
+
+ private RetracerForCodePrinting(Retracer retracer) {
+ this.retracer = retracer;
+ }
+
+ public static RetracerForCodePrinting create(
+ ClassNameMapper classNameMapper, DiagnosticsHandler handler) {
+ return classNameMapper == null
+ ? empty()
+ : new RetracerForCodePrinting(
+ RetracerImpl.createInternal(
+ MappingSupplierInternalImpl.createInternal(classNameMapper), handler));
+ }
+
+ public <T extends RetraceElement<?>> String joinAmbiguousResults(
+ RetraceResult<T> retraceResult, Function<T, String> nameToString) {
+ return StringUtils.join(" <OR> ", retraceResult.stream(), nameToString);
+ }
+
+ private String typeToString(
+ DexType type,
+ Function<DexType, String> noRetraceString,
+ Function<RetraceClassElement, String> retraceResult) {
+ return retracer == null
+ ? noRetraceString.apply(type)
+ : joinAmbiguousResults(retracer.retraceClass(type.asClassReference()), retraceResult);
+ }
+
+ public String toSourceString(DexType type) {
+ return typeToString(
+ type, DexType::toSourceString, element -> element.getRetracedClass().getTypeName());
+ }
+
+ public String toDescriptor(DexType type) {
+ return typeToString(
+ type, DexType::toDescriptorString, element -> element.getRetracedClass().getDescriptor());
+ }
+
+ private String retraceMethodToString(
+ DexMethod method,
+ Function<DexMethod, String> noRetraceString,
+ Function<KnownRetracedMethodReference, String> knownToString,
+ Function<RetracedMethodReference, String> unknownToString) {
+ if (retracer == null) {
+ return noRetraceString.apply(method);
+ }
+ // TODO(b/169953605): Use retracer.retraceMethod() when we have enough information.
+ MethodReference methodReference = method.asMethodReference();
+ RetraceFrameResult retraceFrameResult =
+ retracer
+ .retraceClass(methodReference.getHolderClass())
+ .lookupMethod(methodReference.getMethodName())
+ .narrowByPosition(RetraceStackTraceContext.empty(), OptionalInt.of(1));
+ return joinAmbiguousResults(
+ retraceFrameResult,
+ element -> {
+ if (element.isUnknown()) {
+ return unknownToString.apply(element.getTopFrame());
+ } else {
+ return knownToString.apply(element.getTopFrame().asKnown());
+ }
+ });
+ }
+
+ public String toSourceString(DexMethod method) {
+ return retraceMethodToString(
+ method,
+ DexMethod::toSourceString,
+ knownRetracedMethodReference ->
+ knownRetracedMethodReference.getMethodReference().toSourceString(),
+ unknown -> unknown.getHolderClass().getDescriptor() + " " + unknown.getMethodName());
+ }
+
+ public String toDescriptor(DexMethod method) {
+ return retraceMethodToString(
+ method,
+ m -> m.asMethodReference().toString(),
+ knownRetracedMethodReference ->
+ knownRetracedMethodReference.getMethodReference().toString(),
+ unknown -> unknown.getHolderClass().getDescriptor() + unknown.getMethodName());
+ }
+
+ private String retraceFieldToString(
+ DexField field,
+ Function<DexField, String> noRetraceString,
+ Function<KnownRetracedFieldReference, String> knownToString,
+ Function<RetracedFieldReference, String> unknownToString) {
+ if (retracer == null) {
+ return noRetraceString.apply(field);
+ }
+ // TODO(b/169953605): Use retracer.retraceField() when we have enough information.
+ FieldReference fieldReference = field.asFieldReference();
+ return joinAmbiguousResults(
+ retracer
+ .retraceClass(fieldReference.getHolderClass())
+ .lookupField(fieldReference.getFieldName()),
+ element -> {
+ if (element.isUnknown()) {
+ return unknownToString.apply(element.getField());
+ } else {
+ return knownToString.apply(element.getField().asKnown());
+ }
+ });
+ }
+
+ public String toSourceString(DexField field) {
+ return retraceFieldToString(
+ field,
+ f -> f.asFieldReference().toSourceString(),
+ known -> known.getFieldReference().toSourceString(),
+ unknown -> unknown.getHolderClass().getDescriptor() + " " + unknown.getFieldName());
+ }
+
+ public String toDescriptor(DexField field) {
+ return retraceFieldToString(
+ field,
+ f -> f.asFieldReference().toString(),
+ known -> known.getFieldReference().toString(),
+ unknown -> unknown.getHolderClass().getDescriptor() + unknown.getFieldName());
+ }
+
+ public String toDescriptor(IndexedDexItem item) {
+ if (!(item instanceof DexReference)) {
+ return item.toString();
+ }
+ return ((DexReference) item).apply(this::toDescriptor, this::toDescriptor, this::toDescriptor);
+ }
+
+ public String toSourceString(IndexedDexItem item) {
+ if (!(item instanceof DexReference)) {
+ return item.toSourceString();
+ }
+ return ((DexReference) item)
+ .apply(this::toSourceString, this::toSourceString, this::toSourceString);
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/utils/StringUtils.java b/src/main/java/com/android/tools/r8/utils/StringUtils.java
index f1e4e18..69cef74 100644
--- a/src/main/java/com/android/tools/r8/utils/StringUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/StringUtils.java
@@ -15,6 +15,8 @@
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
public class StringUtils {
public static char[] EMPTY_CHAR_ARRAY = {};
@@ -143,6 +145,15 @@
return join(separator, iterable, fn, BraceType.NONE);
}
+ public static <T> String join(String separator, Stream<T> stream, Function<T, String> fn) {
+ return join(separator, stream.collect(Collectors.toList()), fn, BraceType.NONE);
+ }
+
+ public static <T> String join(
+ String separator, T[] elements, Function<T, String> fn, BraceType brace) {
+ return join(separator, Arrays.asList(elements), fn, brace);
+ }
+
public static <T> String join(String separator, Iterable<T> iterable, BraceType brace) {
return join(separator, iterable, Object::toString, brace);
}