Handle missing definition of Enum.name field

Fixes: b/231929003
Change-Id: I19084900faf0c313a6270a15e048f670b33a7893
diff --git a/src/main/java/com/android/tools/r8/graph/ClasspathOrLibraryClass.java b/src/main/java/com/android/tools/r8/graph/ClasspathOrLibraryClass.java
index da19912..d666539 100644
--- a/src/main/java/com/android/tools/r8/graph/ClasspathOrLibraryClass.java
+++ b/src/main/java/com/android/tools/r8/graph/ClasspathOrLibraryClass.java
@@ -5,5 +5,14 @@
 package com.android.tools.r8.graph;
 
 public interface ClasspathOrLibraryClass extends ClassDefinition, ClasspathOrLibraryDefinition {
+
+  void appendInstanceField(DexEncodedField field);
+
   DexClass asDexClass();
+
+  DexEncodedField lookupField(DexField field);
+
+  static ClasspathOrLibraryClass asClasspathOrLibraryClass(DexClass clazz) {
+    return clazz != null ? clazz.asClasspathOrLibraryClass() : null;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java b/src/main/java/com/android/tools/r8/ir/optimize/library/FieldSynthesis.java
similarity index 81%
rename from src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java
rename to src/main/java/com/android/tools/r8/ir/optimize/library/FieldSynthesis.java
index 5cb256c..dcbca18 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryFieldSynthesis.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/FieldSynthesis.java
@@ -4,29 +4,29 @@
 
 package com.android.tools.r8.ir.optimize.library;
 
-import static com.android.tools.r8.graph.DexLibraryClass.asLibraryClassOrNull;
+import static com.android.tools.r8.graph.ClasspathOrLibraryClass.asClasspathOrLibraryClass;
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.ClasspathOrLibraryClass;
 import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.DexLibraryClass;
 import com.android.tools.r8.graph.FieldAccessFlags;
 
 /**
- * This class synthesizes library fields that we rely on for modeling.
+ * This class synthesizes classpath/library fields that we rely on for modeling.
  *
  * <p>For example, we synthesize the field `java.lang.String java.lang.Enum.name` if it is not
  * present. We use this to model that the constructor `void java.lang.Enum.<init>(java.lang.String,
  * int)` initializes `java.lang.String java.lang.Enum.name` to the first argument of the
  * constructor.
  */
-public class LibraryFieldSynthesis {
+public class FieldSynthesis {
 
   public static void synthesizeEnumFields(AppView<?> appView) {
     DexItemFactory dexItemFactory = appView.dexItemFactory();
-    DexLibraryClass enumClass =
-        asLibraryClassOrNull(appView.definitionFor(dexItemFactory.enumType));
+    ClasspathOrLibraryClass enumClass =
+        asClasspathOrLibraryClass(appView.definitionFor(dexItemFactory.enumType));
     if (enumClass != null) {
       dexItemFactory.enumMembers.forEachField(
           field -> {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java
index a7041c8..df2c436 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java
@@ -68,7 +68,7 @@
     EnumMembers enumMembers = dexItemFactory.enumMembers;
     DexEncodedMethod enumConstructor = lookupMethod(enumMembers.constructor);
     if (enumConstructor != null) {
-      LibraryFieldSynthesis.synthesizeEnumFields(appView);
+      FieldSynthesis.synthesizeEnumFields(appView);
       InstanceFieldInitializationInfoFactory factory =
           appView.instanceFieldInitializationInfoFactory();
       InstanceFieldInitializationInfoCollection fieldInitializationInfos =