Remove unused methods from FieldAccessInfo
Change-Id: Ia6489a54552540edb1369d62c045f4d7da545e06
diff --git a/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java b/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java
index 0c52979..c3a7531 100644
--- a/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java
+++ b/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java
@@ -218,25 +218,14 @@
"Should only be querying the number of access contexts after flattening");
}
- ProgramMethod getUniqueAccessContext() {
- if (accessesWithContexts != null && accessesWithContexts.size() == 1) {
- ProgramMethodSet contexts = accessesWithContexts.values().iterator().next();
- if (contexts.size() == 1) {
- return contexts.iterator().next();
- }
- }
- return null;
- }
-
@Override
- @SuppressWarnings("ReferenceEquality")
void flattenAccessContexts(DexField field) {
if (accessesWithContexts != null) {
ProgramMethodSet flattenedAccessContexts =
accessesWithContexts.computeIfAbsent(field, ignore -> ProgramMethodSet.create());
accessesWithContexts.forEach(
(access, contexts) -> {
- if (access != field) {
+ if (access.isNotIdenticalTo(field)) {
flattenedAccessContexts.addAll(contexts);
}
});
@@ -244,7 +233,6 @@
if (!flattenedAccessContexts.isEmpty()) {
accessesWithContexts.put(field, flattenedAccessContexts);
}
- assert accessesWithContexts.size() <= 1;
}
}
@@ -283,7 +271,6 @@
* Returns true if this field is written by a method in the program other than {@param method}.
*/
@Override
- @SuppressWarnings("ReferenceEquality")
public boolean isAccessedOutside(DexEncodedMethod method) {
for (ProgramMethodSet encodedWriteContexts : accessesWithContexts.values()) {
for (ProgramMethod encodedWriteContext : encodedWriteContexts) {
@@ -317,7 +304,6 @@
}
@Override
- @SuppressWarnings("ReferenceEquality")
ConcreteAccessContexts rewrittenWithLens(DexDefinitionSupplier definitions, GraphLens lens) {
Map<DexField, ProgramMethodSet> rewrittenAccessesWithContexts = null;
for (Entry<DexField, ProgramMethodSet> entry : accessesWithContexts.entrySet()) {
@@ -327,7 +313,7 @@
ProgramMethodSet contexts = entry.getValue();
ProgramMethodSet rewrittenContexts = contexts.rewrittenWithLens(definitions, lens);
- if (rewrittenField == field && rewrittenContexts == contexts) {
+ if (rewrittenField.isIdenticalTo(field) && rewrittenContexts == contexts) {
if (rewrittenAccessesWithContexts == null) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/graph/FieldAccessInfo.java b/src/main/java/com/android/tools/r8/graph/FieldAccessInfo.java
index 34b3f2b..126a0d0 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldAccessInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldAccessInfo.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.graph;
-import com.android.tools.r8.utils.collections.ProgramMethodSet;
-import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -16,28 +14,20 @@
DexField getField();
- int getNumberOfReadContexts();
-
int getNumberOfWriteContexts();
AbstractAccessContexts getReadsWithContexts();
AbstractAccessContexts getWritesWithContexts();
- ProgramMethod getUniqueReadContext();
-
boolean hasKnownReadContexts();
boolean hasKnownWriteContexts();
void forEachIndirectAccess(Consumer<DexField> consumer);
- void forEachIndirectAccessWithContexts(BiConsumer<DexField, ProgramMethodSet> consumer);
-
void forEachAccessContext(Consumer<ProgramMethod> consumer);
- void forEachReadContext(Consumer<ProgramMethod> consumer);
-
void forEachWriteContext(Consumer<ProgramMethod> consumer);
boolean hasReflectiveAccess();
diff --git a/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java b/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
index 7bbc78d..a09751b 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
@@ -8,13 +8,9 @@
import com.android.tools.r8.graph.AbstractAccessContexts.ConcreteAccessContexts;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.shaking.Enqueuer.FieldAccessKind;
-import com.android.tools.r8.utils.collections.ProgramMethodSet;
import com.android.tools.r8.utils.timing.Timing;
import com.google.common.collect.Sets;
-import java.util.IdentityHashMap;
-import java.util.Map;
import java.util.Set;
-import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -35,7 +31,7 @@
public static final int FLAG_IS_READ_FROM_RECORD_INVOKE_DYNAMIC = 1 << 5;
// A direct reference to the definition of the field.
- private DexField field;
+ private final DexField field;
// If this field is accessed from a method handle or has a reflective access.
private int flags;
@@ -106,23 +102,11 @@
}
@Override
- public int getNumberOfReadContexts() {
- return readsWithContexts.getNumberOfAccessContexts();
- }
-
- @Override
public int getNumberOfWriteContexts() {
return writesWithContexts.getNumberOfAccessContexts();
}
@Override
- public ProgramMethod getUniqueReadContext() {
- return readsWithContexts.isConcrete()
- ? readsWithContexts.asConcrete().getUniqueAccessContext()
- : null;
- }
-
- @Override
public boolean hasKnownReadContexts() {
return !readsWithContexts.isTop();
}
@@ -159,51 +143,12 @@
}
@Override
- @SuppressWarnings("ReferenceEquality")
- public void forEachIndirectAccessWithContexts(BiConsumer<DexField, ProgramMethodSet> consumer) {
- Map<DexField, ProgramMethodSet> indirectAccessesWithContexts = new IdentityHashMap<>();
- addAccessesWithContextsToMap(
- readsWithContexts, access -> access != field, indirectAccessesWithContexts);
- addAccessesWithContextsToMap(
- writesWithContexts, access -> access != field, indirectAccessesWithContexts);
- indirectAccessesWithContexts.forEach(consumer);
- }
-
- private static void addAccessesWithContextsToMap(
- AbstractAccessContexts accessesWithContexts,
- Predicate<DexField> predicate,
- Map<DexField, ProgramMethodSet> out) {
- if (accessesWithContexts.isBottom()) {
- return;
- }
- if (accessesWithContexts.isConcrete()) {
- extendAccessesWithContexts(
- accessesWithContexts.asConcrete().getAccessesWithContexts(), predicate, out);
- return;
- }
- throw new Unreachable("Should never be iterating the indirect accesses when they are unknown");
- }
-
- private static void extendAccessesWithContexts(
- Map<DexField, ProgramMethodSet> accessesWithContexts,
- Predicate<DexField> predicate,
- Map<DexField, ProgramMethodSet> out) {
- accessesWithContexts.forEach(
- (access, contexts) -> {
- if (predicate.test(access)) {
- out.computeIfAbsent(access, ignore -> ProgramMethodSet.create()).addAll(contexts);
- }
- });
- }
-
- @Override
public void forEachAccessContext(Consumer<ProgramMethod> consumer) {
forEachReadContext(consumer);
forEachWriteContext(consumer);
}
- @Override
- public void forEachReadContext(Consumer<ProgramMethod> consumer) {
+ private void forEachReadContext(Consumer<ProgramMethod> consumer) {
readsWithContexts.forEachAccessContext(consumer);
}