Use static methods for creating bimaps with identity backing
Change-Id: I01a1284ef601131c02168c6d7603a6cd77b2889d
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 187402a..349332a 100644
--- a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
@@ -27,7 +27,7 @@
public final class AppliedGraphLens extends NonIdentityGraphLens {
private final MutableBidirectionalManyToOneRepresentativeMap<DexType, DexType> renamedTypeNames =
- new BidirectionalManyToOneRepresentativeHashMap<>();
+ BidirectionalManyToOneRepresentativeHashMap.newIdentityHashMap();
private final BiMap<DexField, DexField> originalFieldSignatures = HashBiMap.create();
private final BiMap<DexMethod, DexMethod> originalMethodSignatures = HashBiMap.create();
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 7135cfc..e5c349c 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -240,7 +240,7 @@
protected final Map<DexType, DexType> typeMap = new IdentityHashMap<>();
protected final Map<DexMethod, DexMethod> methodMap = new IdentityHashMap<>();
protected final MutableBidirectionalManyToOneRepresentativeMap<DexField, DexField> fieldMap =
- new BidirectionalManyToOneRepresentativeHashMap<>();
+ BidirectionalManyToOneRepresentativeHashMap.newIdentityHashMap();
protected final MutableBidirectionalOneToOneMap<DexMethod, DexMethod> originalMethodSignatures =
new BidirectionalOneToOneHashMap<>();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java
index f5fdd6f..bc713ce 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java
@@ -91,16 +91,16 @@
public static class Builder {
private final MutableBidirectionalManyToOneRepresentativeMap<DexField, DexField> fieldMap =
- new BidirectionalManyToOneRepresentativeHashMap<>();
+ BidirectionalManyToOneRepresentativeHashMap.newIdentityHashMap();
private final BidirectionalManyToOneHashMap<DexMethod, DexMethod> methodMap =
- new BidirectionalManyToOneHashMap<>();
+ BidirectionalManyToOneHashMap.newIdentityHashMap();
private final BidirectionalOneToManyRepresentativeHashMap<DexMethod, DexMethod>
originalMethodSignatures = new BidirectionalOneToManyRepresentativeHashMap<>();
private final Map<DexMethod, List<ExtraParameter>> methodExtraParameters =
new IdentityHashMap<>();
private final BidirectionalManyToOneHashMap<DexMethod, DexMethod> pendingMethodMapUpdates =
- new BidirectionalManyToOneHashMap<>();
+ BidirectionalManyToOneHashMap.newIdentityHashMap();
private final BidirectionalOneToManyRepresentativeHashMap<DexMethod, DexMethod>
pendingOriginalMethodSignatureUpdates = new BidirectionalOneToManyRepresentativeHashMap<>();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java
index 06d582e..927e629 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java
@@ -85,7 +85,7 @@
public static class Builder {
private final MutableBidirectionalManyToOneMap<DexType, DexType> mergedClasses =
- new BidirectionalManyToOneHashMap<>();
+ BidirectionalManyToOneHashMap.newIdentityHashMap();
void addMergeGroup(MergeGroup group) {
group.forEachSource(clazz -> mergedClasses.put(clazz.getType(), group.getTarget().getType()));
diff --git a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingResult.java b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingResult.java
index 4439aea..e1311d5 100644
--- a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingResult.java
+++ b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingResult.java
@@ -23,7 +23,7 @@
// Mapping from non-hoisted bridge methods to hoisted bridge methods.
private final MutableBidirectionalManyToOneRepresentativeMap<DexMethod, DexMethod>
- bridgeToHoistedBridgeMap = new BidirectionalManyToOneRepresentativeHashMap<>();
+ bridgeToHoistedBridgeMap = BidirectionalManyToOneRepresentativeHashMap.newIdentityHashMap();
BridgeHoistingResult(AppView<AppInfoWithLiveness> appView) {
this.appView = appView;
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 761b314..b2d9332 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -208,7 +208,7 @@
// Map from source class to target class.
private final MutableBidirectionalManyToOneMap<DexType, DexType> mergedClasses =
- new BidirectionalManyToOneHashMap<>();
+ BidirectionalManyToOneHashMap.newIdentityHashMap();
// Set of types that must not be merged into their subtype.
private final Set<DexType> pinnedTypes = Sets.newIdentityHashSet();
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
index d610175..d4c124f 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -91,7 +91,7 @@
Map<DexType, DexType> typeMap = new IdentityHashMap<>();
BidirectionalManyToOneRepresentativeHashMap<DexField, DexField> fieldMap =
- new BidirectionalManyToOneRepresentativeHashMap<>();
+ BidirectionalManyToOneRepresentativeHashMap.newIdentityHashMap();
Map<DexMethod, DexMethod> methodMap = new IdentityHashMap<>();
protected final MutableBidirectionalOneToManyRepresentativeMap<DexMethod, DexMethod>
diff --git a/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneHashMap.java b/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneHashMap.java
index b75d224..1e53a14 100644
--- a/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneHashMap.java
+++ b/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneHashMap.java
@@ -17,11 +17,11 @@
private final Map<K, V> backing;
private final Map<V, Set<K>> inverse;
- public BidirectionalManyToOneHashMap() {
- this(new IdentityHashMap<>(), new IdentityHashMap<>());
+ public static <K, V> BidirectionalManyToOneHashMap<K, V> newIdentityHashMap() {
+ return new BidirectionalManyToOneHashMap<>(new IdentityHashMap<>(), new IdentityHashMap<>());
}
- private BidirectionalManyToOneHashMap(Map<K, V> backing, Map<V, Set<K>> inverse) {
+ protected BidirectionalManyToOneHashMap(Map<K, V> backing, Map<V, Set<K>> inverse) {
this.backing = backing;
this.inverse = inverse;
}
diff --git a/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneRepresentativeHashMap.java b/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneRepresentativeHashMap.java
index 4c2f3a8..ffd653e 100644
--- a/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneRepresentativeHashMap.java
+++ b/src/main/java/com/android/tools/r8/utils/collections/BidirectionalManyToOneRepresentativeHashMap.java
@@ -13,7 +13,18 @@
extends BidirectionalManyToOneHashMap<K, V>
implements MutableBidirectionalManyToOneRepresentativeMap<K, V> {
- private final Map<V, K> representatives = new IdentityHashMap<>();
+ private final Map<V, K> representatives;
+
+ public static <K, V> BidirectionalManyToOneRepresentativeHashMap<K, V> newIdentityHashMap() {
+ return new BidirectionalManyToOneRepresentativeHashMap<>(
+ new IdentityHashMap<>(), new IdentityHashMap<>(), new IdentityHashMap<>());
+ }
+
+ private BidirectionalManyToOneRepresentativeHashMap(
+ Map<K, V> backing, Map<V, Set<K>> inverse, Map<V, K> representatives) {
+ super(backing, inverse);
+ this.representatives = representatives;
+ }
@Override
public void clear() {