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.