Support for getting method signature at time of given lens
Bug: 201984767
Change-Id: Ia61832f65073c18f27d844966eb8596fd52a6c33
diff --git a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
index a05960f..8618c4e 100644
--- a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
@@ -120,14 +120,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- if (extraOriginalMethodSignatures.containsKey(method)) {
- return extraOriginalMethodSignatures.get(method);
- }
- return originalMethodSignatures.getOrDefault(method, method);
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
return originalFieldSignatures.inverse().getOrDefault(originalField, originalField);
}
@@ -162,7 +154,10 @@
@Override
protected DexMethod internalGetPreviousMethodSignature(DexMethod method) {
- return method;
+ if (extraOriginalMethodSignatures.containsKey(method)) {
+ return extraOriginalMethodSignatures.get(method);
+ }
+ return originalMethodSignatures.getOrDefault(method, method);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLens.java b/src/main/java/com/android/tools/r8/graph/GraphLens.java
index a81d742..3b816d8 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -285,7 +285,21 @@
public abstract DexField getOriginalFieldSignature(DexField field);
- public abstract DexMethod getOriginalMethodSignature(DexMethod method);
+ public final DexMethod getOriginalMethodSignature(DexMethod method) {
+ return getOriginalMethodSignature(method, null);
+ }
+
+ public final DexMethod getOriginalMethodSignature(DexMethod method, GraphLens atGraphLens) {
+ GraphLens current = this;
+ DexMethod original = method;
+ while (current.isNonIdentityLens() && current != atGraphLens) {
+ NonIdentityGraphLens nonIdentityLens = current.asNonIdentityLens();
+ original = nonIdentityLens.internalGetPreviousMethodSignature(original);
+ current = nonIdentityLens.getPrevious();
+ }
+ assert atGraphLens == null ? current.isIdentityLens() : (current == atGraphLens);
+ return original;
+ }
public abstract DexField getRenamedFieldSignature(DexField originalField);
@@ -856,11 +870,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return method;
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
return originalField;
}
@@ -950,11 +959,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return getPrevious().getOriginalMethodSignature(method);
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
return getPrevious().getRenamedFieldSignature(originalField);
}
diff --git a/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java b/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
index 00bd8bb..62ce9d8 100644
--- a/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
@@ -130,12 +130,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- DexMethod originalMethod = internalGetPreviousMethodSignature(method);
- return getPrevious().getOriginalMethodSignature(originalMethod);
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
DexField renamedField = getPrevious().getRenamedFieldSignature(originalField);
return internalGetNextFieldSignature(renamedField);
diff --git a/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
index d949ab2..e63eb5e 100644
--- a/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
@@ -71,11 +71,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return getPrevious().getOriginalMethodSignature(method);
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
return getPrevious().getRenamedFieldSignature(originalField);
}
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
index 8873add..0e6b99f 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
@@ -100,11 +100,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return getPrevious().getOriginalMethodSignature(method);
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
return getPrevious().getRenamedFieldSignature(originalField);
}
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
index d202af8..8861f6c 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
@@ -68,11 +68,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return getPrevious().getOriginalMethodSignature(method);
- }
-
- @Override
public DexField getRenamedFieldSignature(DexField originalField) {
return getPrevious().getRenamedFieldSignature(originalField);
}
diff --git a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
index 6a6c3bb..c387c1c 100644
--- a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
@@ -27,11 +27,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return getPrevious().getOriginalMethodSignature(internalGetPreviousMethodSignature(method));
- }
-
- @Override
public DexMethod getRenamedMethodSignature(DexMethod originalMethod, GraphLens applied) {
DexMethod renamedMethod = getPrevious().getRenamedMethodSignature(originalMethod, applied);
return bridgeToHoistedBridgeMap.getOrDefault(renamedMethod, renamedMethod);
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
index f2732f6..ea9f971 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
@@ -95,12 +95,6 @@
}
@Override
- public DexMethod getOriginalMethodSignature(DexMethod method) {
- return super.getOriginalMethodSignature(
- originalMethodSignaturesForBridges.getOrDefault(method, method));
- }
-
- @Override
public MethodLookupResult internalDescribeLookupMethod(
MethodLookupResult previous, DexMethod context) {
assert context != null || verifyIsContextFreeForMethod(previous.getReference());
@@ -135,6 +129,12 @@
}
@Override
+ protected DexMethod internalGetPreviousMethodSignature(DexMethod method) {
+ return super.internalGetPreviousMethodSignature(
+ originalMethodSignaturesForBridges.getOrDefault(method, method));
+ }
+
+ @Override
protected Type mapInvocationType(DexMethod newMethod, DexMethod originalMethod, Type type) {
return mapVirtualInterfaceInvocationTypes(appView, newMethod, originalMethod, type);
}