Preparation for lens rewriting instance initializer info
Change-Id: Iec76dfa435ebdbefec270723e445df03ffa57622
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 8e0dfc4..401173c 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -24,7 +24,6 @@
import com.android.tools.r8.utils.OptionalBool;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
-import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Set;
@@ -65,7 +64,7 @@
private Set<DexMethod> unneededVisibilityBridgeMethods = ImmutableSet.of();
private HorizontallyMergedLambdaClasses horizontallyMergedLambdaClasses;
private VerticallyMergedClasses verticallyMergedClasses;
- private Set<DexType> unboxedEnums = Collections.emptySet();
+ private EnumValueInfoMapCollection unboxedEnums = EnumValueInfoMapCollection.empty();
private Map<DexClass, DexValueString> sourceDebugExtensions = new IdentityHashMap<>();
@@ -370,12 +369,16 @@
this.verticallyMergedClasses = verticallyMergedClasses;
}
- public void setUnboxedEnums(Set<DexType> unboxedEnums) {
+ public EnumValueInfoMapCollection unboxedEnums() {
+ return unboxedEnums;
+ }
+
+ public void setUnboxedEnums(EnumValueInfoMapCollection unboxedEnums) {
this.unboxedEnums = unboxedEnums;
}
public boolean validateUnboxedEnumsHaveBeenPruned() {
- for (DexType unboxedEnum : unboxedEnums) {
+ for (DexType unboxedEnum : unboxedEnums.enumSet()) {
assert definitionForProgramType(unboxedEnum) == null
: "Enum " + unboxedEnum + " has been unboxed but is still in the program.";
assert appInfo().withLiveness().wasPruned(unboxedEnum)
diff --git a/src/main/java/com/android/tools/r8/graph/EnumValueInfoMapCollection.java b/src/main/java/com/android/tools/r8/graph/EnumValueInfoMapCollection.java
index 470685f..c6a9a8b 100644
--- a/src/main/java/com/android/tools/r8/graph/EnumValueInfoMapCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/EnumValueInfoMapCollection.java
@@ -86,6 +86,10 @@
return map.size();
}
+ public boolean hasEnumValueInfo(DexField field) {
+ return map.containsKey(field);
+ }
+
public EnumValueInfo getEnumValueInfo(DexField field) {
return map.get(field);
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
index ee87965..1aa0955 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
@@ -233,9 +233,9 @@
return;
}
ImmutableSet<DexType> enumsToUnbox = ImmutableSet.copyOf(this.enumsUnboxingCandidates.keySet());
- appView.setUnboxedEnums(enumsToUnbox);
NestedGraphLense enumUnboxingLens = new TreeFixer(enumsToUnbox).fixupTypeReferences();
enumUnboxerRewriter = new EnumUnboxingRewriter(appView, enumsToUnbox);
+ appView.setUnboxedEnums(enumUnboxerRewriter.getEnumsToUnbox());
if (enumUnboxingLens != null) {
appView.setGraphLense(enumUnboxingLens);
appView.setAppInfo(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
index ea26434..c05f41b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
@@ -76,6 +76,10 @@
"$enumboxing$ordinal");
}
+ public EnumValueInfoMapCollection getEnumsToUnbox() {
+ return enumsToUnbox;
+ }
+
void rewriteCode(IRCode code) {
// We should not process the enum methods, they will be removed and they may contain invalid
// rewriting rules.