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 =