Change DexEncodedField.create to use builders before inlining

Change-Id: If514aa060620e4856887758c7294551dc5845673
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
index eb08902..c0e7511 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -343,23 +343,19 @@
   }
 
   public static Builder builder() {
-    return new Builder();
+    return new Builder(false);
   }
 
   private static Builder builder(DexEncodedField from) {
-    return new Builder(from);
+    return new Builder(from.isD8R8Synthesized(), from);
+  }
+
+  public static Builder syntheticBuilder() {
+    return new Builder(true);
   }
 
   public static DexEncodedField create(DexField field, FieldAccessFlags accessFlags) {
-    return new DexEncodedField(
-        field,
-        accessFlags,
-        FieldTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        null,
-        false,
-        false,
-        AndroidApiLevel.UNKNOWN);
+    return builder().setField(field).setAccessFlags(accessFlags).build();
   }
 
   public static DexEncodedField create(
@@ -368,15 +364,13 @@
       FieldTypeSignature genericSignature,
       DexAnnotationSet annotations,
       DexValue staticValue) {
-    return new DexEncodedField(
-        field,
-        accessFlags,
-        FieldTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        staticValue,
-        false,
-        false,
-        AndroidApiLevel.UNKNOWN);
+    return builder()
+        .setField(field)
+        .setAccessFlags(accessFlags)
+        .setGenericSignature(genericSignature)
+        .setAnnotations(annotations)
+        .setStaticValue(staticValue)
+        .build();
   }
 
   public static DexEncodedField create(
@@ -386,15 +380,14 @@
       DexAnnotationSet annotations,
       DexValue staticValue,
       boolean deprecated) {
-    return new DexEncodedField(
-        field,
-        accessFlags,
-        FieldTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        staticValue,
-        deprecated,
-        false,
-        AndroidApiLevel.UNKNOWN);
+    return builder()
+        .setField(field)
+        .setAccessFlags(accessFlags)
+        .setGenericSignature(genericSignature)
+        .setAnnotations(annotations)
+        .setStaticValue(staticValue)
+        .setDeprecated(deprecated)
+        .build();
   }
 
   public static DexEncodedField create(
@@ -405,15 +398,15 @@
       DexValue staticValue,
       boolean deprecated,
       AndroidApiLevel apiLevel) {
-    return new DexEncodedField(
-        field,
-        accessFlags,
-        FieldTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        staticValue,
-        deprecated,
-        false,
-        apiLevel);
+    return builder()
+        .setField(field)
+        .setAccessFlags(accessFlags)
+        .setGenericSignature(genericSignature)
+        .setAnnotations(annotations)
+        .setStaticValue(staticValue)
+        .setDeprecated(deprecated)
+        .setApiLevel(apiLevel)
+        .build();
   }
 
   public static DexEncodedField createSynthetic(
@@ -424,15 +417,15 @@
       DexValue staticValue,
       boolean deprecated,
       AndroidApiLevel apiLevel) {
-    return new DexEncodedField(
-        field,
-        accessFlags,
-        FieldTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        staticValue,
-        deprecated,
-        true,
-        apiLevel);
+    return syntheticBuilder()
+        .setField(field)
+        .setAccessFlags(accessFlags)
+        .setGenericSignature(genericSignature)
+        .setAnnotations(annotations)
+        .setStaticValue(staticValue)
+        .setDeprecated(deprecated)
+        .setApiLevel(apiLevel)
+        .build();
   }
 
   public static class Builder {
@@ -442,15 +435,17 @@
     private FieldAccessFlags accessFlags;
     private FieldTypeSignature genericSignature = FieldTypeSignature.noSignature();
     private DexValue staticValue;
-    private AndroidApiLevel apiLevel;
+    private AndroidApiLevel apiLevel = AndroidApiLevel.UNKNOWN;
     private FieldOptimizationInfo optimizationInfo = DefaultFieldOptimizationInfo.getInstance();
     private boolean deprecated;
-    private boolean d8R8Synthesized;
+    private final boolean d8R8Synthesized;
     private Consumer<DexEncodedField> buildConsumer = ConsumerUtils.emptyConsumer();
 
-    Builder() {}
+    private Builder(boolean d8R8Synthesized) {
+      this.d8R8Synthesized = d8R8Synthesized;
+    }
 
-    Builder(DexEncodedField from) {
+    private Builder(boolean d8R8Synthesized, DexEncodedField from) {
       // Copy all the mutable state of a DexEncodedField here.
       field = from.getReference();
       accessFlags = from.accessFlags.copy();
@@ -464,7 +459,7 @@
               ? from.optimizationInfo.asMutableFieldOptimizationInfo().mutableCopy()
               : from.optimizationInfo;
       deprecated = from.isDeprecated();
-      d8R8Synthesized = from.isD8R8Synthesized();
+      this.d8R8Synthesized = d8R8Synthesized;
     }
 
     public Builder apply(Consumer<Builder> consumer) {
@@ -509,13 +504,23 @@
       return this;
     }
 
-    public Builder setD8R8Synthesized() {
-      this.d8R8Synthesized = true;
+    public Builder setApiLevel(AndroidApiLevel apiLevel) {
+      this.apiLevel = apiLevel;
       return this;
     }
 
-    public Builder setApiLevel(AndroidApiLevel apiLevel) {
-      this.apiLevel = apiLevel;
+    public Builder setGenericSignature(FieldTypeSignature genericSignature) {
+      this.genericSignature = genericSignature;
+      return this;
+    }
+
+    public Builder setStaticValue(DexValue staticValue) {
+      this.staticValue = staticValue;
+      return this;
+    }
+
+    public Builder setDeprecated(boolean deprecated) {
+      this.deprecated = deprecated;
       return this;
     }
 
@@ -524,7 +529,6 @@
       assert accessFlags != null;
       assert genericSignature != null;
       assert annotations != null;
-      assert apiLevel != null;
       DexEncodedField dexEncodedField =
           new DexEncodedField(
               field,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
index d660d97..22654d6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
@@ -124,17 +124,15 @@
   private void synthesizeStaticFields(SyntheticProgramClassBuilder builder) {
     builder.setStaticFields(
         ImmutableList.of(
-            DexEncodedField.builder()
+            DexEncodedField.syntheticBuilder()
                 .setField(this.initializedValueField)
                 .setAccessFlags(FieldAccessFlags.createPrivateStaticSynthetic())
                 .setApiLevel(AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView))
-                .setD8R8Synthesized()
                 .build(),
-            DexEncodedField.builder()
+            DexEncodedField.syntheticBuilder()
                 .setField(this.constantValueField)
                 .setAccessFlags(FieldAccessFlags.createPrivateStaticSynthetic())
                 .setApiLevel(AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView))
-                .setD8R8Synthesized()
                 .build()));
   }