Check equality on referenced items excluding context in synthetic rewrite.
Change-Id: I5a8955dfd4e03debbaaa09960e71df3546c93eae
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
index 6a5e9a3..b200c0a 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
@@ -309,12 +309,12 @@
for (SyntheticReference reference : nonLecacySyntheticItems.values()) {
SyntheticReference rewritten = reference.rewrite(lens);
// If the reference has been rewritten the compiler has changed it and we drop it from the
- // set of synthetics.
- if (reference == rewritten) {
+ // set of synthetics. The context may or may not have changed.
+ if (reference.getReference() == rewritten.getReference()) {
rewrittenItems.put(rewritten.getHolder(), rewritten);
} else {
- // If the item is rewritten, it should be moved to another holder as the synthetic holder
- // is no longer part of the synthetic collection.
+ // If the referenced item is rewritten, it should be moved to another holder as the
+ // synthetic holder is no longer part of the synthetic collection.
assert reference.getHolder() != rewritten.getHolder();
}
}
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java
index 571331b..5470d53 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java
@@ -5,6 +5,7 @@
import com.android.tools.r8.graph.DexClass;
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.GraphLens.NonIdentityGraphLens;
import com.android.tools.r8.graph.ProgramMethod;
@@ -24,6 +25,11 @@
}
@Override
+ DexReference getReference() {
+ return method;
+ }
+
+ @Override
DexType getHolder() {
return method.holder;
}
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticReference.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticReference.java
index 408324e..6618378 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticReference.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticReference.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.synthesis;
import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.GraphLens.NonIdentityGraphLens;
import java.util.function.Function;
@@ -22,6 +23,8 @@
abstract SyntheticDefinition lookupDefinition(Function<DexType, DexClass> definitions);
+ abstract DexReference getReference();
+
final SynthesizingContext getContext() {
return context;
}