Introduce a DefaultNonIdentityGraphLens for defining new lenses
Fixes: b/217665738
Change-Id: I44a4d3d2a8b482873197f242a7c5d4f14af1c782
diff --git a/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java
new file mode 100644
index 0000000..1f8f516
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java
@@ -0,0 +1,103 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.graph.lens;
+
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexField;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
+
+public class DefaultNonIdentityGraphLens extends NonIdentityGraphLens {
+
+ public DefaultNonIdentityGraphLens(AppView<?> appView) {
+ this(appView.dexItemFactory(), appView.graphLens());
+ }
+
+ public DefaultNonIdentityGraphLens(DexItemFactory dexItemFactory, GraphLens previousLens) {
+ super(dexItemFactory, previousLens);
+ }
+
+ @Override
+ public boolean isContextFreeForMethods() {
+ return getPrevious().isContextFreeForMethods();
+ }
+
+ // Class lookup APIs.
+
+ @Override
+ protected DexType internalDescribeLookupClassType(DexType previous) {
+ return previous;
+ }
+
+ @Override
+ public DexType getOriginalType(DexType type) {
+ return getPrevious().getOriginalType(type);
+ }
+
+ @Override
+ public Iterable<DexType> getOriginalTypes(DexType type) {
+ return getPrevious().getOriginalTypes(type);
+ }
+
+ // Field lookup APIs.
+
+ @Override
+ protected FieldLookupResult internalDescribeLookupField(FieldLookupResult previous) {
+ return previous;
+ }
+
+ @Override
+ public DexField getOriginalFieldSignature(DexField field) {
+ return getPrevious().getOriginalFieldSignature(field);
+ }
+
+ @Override
+ public DexField getRenamedFieldSignature(DexField originalField, GraphLens codeLens) {
+ if (this == codeLens) {
+ return originalField;
+ }
+ return getPrevious().getRenamedFieldSignature(originalField);
+ }
+
+ // Method lookup APIs.
+
+ @Override
+ protected MethodLookupResult internalDescribeLookupMethod(
+ MethodLookupResult previous, DexMethod context) {
+ return previous;
+ }
+
+ @Override
+ public DexMethod getPreviousMethodSignature(DexMethod method) {
+ return method;
+ }
+
+ @Override
+ public DexMethod getNextMethodSignature(DexMethod method) {
+ return method;
+ }
+
+ @Override
+ public DexMethod getRenamedMethodSignature(DexMethod originalMethod, GraphLens codeLens) {
+ if (this == codeLens) {
+ return originalMethod;
+ }
+ return getNextMethodSignature(getPrevious().getRenamedMethodSignature(originalMethod));
+ }
+
+ // Prototype lookup APIs.
+
+ @Override
+ public RewrittenPrototypeDescription lookupPrototypeChangesForMethodDefinition(
+ DexMethod method, GraphLens codeLens) {
+ if (this == codeLens) {
+ return RewrittenPrototypeDescription.none();
+ }
+ DexMethod previousMethodSignature = getPreviousMethodSignature(method);
+ return getPrevious().lookupPrototypeChangesForMethodDefinition(previousMethodSignature);
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java b/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java
index dc9258b..5aedebc 100644
--- a/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java
@@ -6,13 +6,11 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.lens.FieldLookupResult;
+import com.android.tools.r8.graph.lens.DefaultNonIdentityGraphLens;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.graph.lens.MethodLookupResult;
-import com.android.tools.r8.graph.lens.NonIdentityGraphLens;
import com.android.tools.r8.graph.proto.ArgumentInfoCollection;
import com.android.tools.r8.graph.proto.ArgumentPermutation;
import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
@@ -24,7 +22,7 @@
import java.util.IdentityHashMap;
import java.util.Map;
-public class ProtoNormalizerGraphLens extends NonIdentityGraphLens {
+public class ProtoNormalizerGraphLens extends DefaultNonIdentityGraphLens {
private final BidirectionalOneToOneMap<DexMethod, DexMethod> newMethodSignatures;
private final Map<DexMethod, RewrittenPrototypeDescription> prototypeChanges;
@@ -43,37 +41,6 @@
}
@Override
- public DexType getOriginalType(DexType type) {
- return getPrevious().getOriginalType(type);
- }
-
- @Override
- public Iterable<DexType> getOriginalTypes(DexType type) {
- return getPrevious().getOriginalTypes(type);
- }
-
- @Override
- public DexField getOriginalFieldSignature(DexField field) {
- return getPrevious().getOriginalFieldSignature(field);
- }
-
- @Override
- public DexField getRenamedFieldSignature(DexField originalField, GraphLens applied) {
- if (this == applied) {
- return originalField;
- }
- return getPrevious().getRenamedFieldSignature(originalField);
- }
-
- @Override
- public DexMethod getRenamedMethodSignature(DexMethod originalMethod, GraphLens applied) {
- if (this == applied) {
- return originalMethod;
- }
- return getNextMethodSignature(getPrevious().getRenamedMethodSignature(originalMethod));
- }
-
- @Override
public RewrittenPrototypeDescription lookupPrototypeChangesForMethodDefinition(
DexMethod method, GraphLens codeLens) {
if (this == codeLens) {
@@ -90,16 +57,6 @@
}
@Override
- public boolean isContextFreeForMethods() {
- return getPrevious().isContextFreeForMethods();
- }
-
- @Override
- protected FieldLookupResult internalDescribeLookupField(FieldLookupResult previous) {
- return previous;
- }
-
- @Override
protected MethodLookupResult internalDescribeLookupMethod(
MethodLookupResult previous, DexMethod context) {
DexMethod methodSignature = previous.getReference();
@@ -122,11 +79,6 @@
}
@Override
- protected DexType internalDescribeLookupClassType(DexType previous) {
- return previous;
- }
-
- @Override
public DexMethod getPreviousMethodSignature(DexMethod method) {
return newMethodSignatures.getRepresentativeKeyOrDefault(method, method);
}