Introduce temporary create methods for DexEncodedFields

This is the first step before moving to using builders.

Change-Id: I806380a6242a5b049c86f80417116aea7700392d
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 68a9a67..be12797 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -651,7 +651,7 @@
         }
       }
       fields[i] =
-          new DexEncodedField(
+          DexEncodedField.create(
               field, accessFlags, fieldTypeSignature, fieldAnnotations, staticValue);
     }
     return fields;
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 5efaba3..eb08902 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -32,7 +32,6 @@
 public class DexEncodedField extends DexEncodedMember<DexEncodedField, DexField>
     implements StructuralItem<DexEncodedField> {
 
-  public static final boolean D8_R8_SYNTHESIZED = true;
   public static final boolean NOT_DEPRECATED = false;
   public static final DexValue NO_STATIC_VALUE = null;
   public static final DexEncodedField[] EMPTY_ARRAY = {};
@@ -56,38 +55,7 @@
     // TODO(b/171867022): Should the optimization info and member info be part of the definition?
   }
 
-  public DexEncodedField(DexField field, FieldAccessFlags accessFlags) {
-    this(field, accessFlags, FieldTypeSignature.noSignature(), DexAnnotationSet.empty(), null);
-  }
-
-  public DexEncodedField(
-      DexField field,
-      FieldAccessFlags accessFlags,
-      FieldTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      DexValue staticValue) {
-    this(field, accessFlags, genericSignature, annotations, staticValue, false);
-  }
-
-  public DexEncodedField(
-      DexField field,
-      FieldAccessFlags accessFlags,
-      FieldTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      DexValue staticValue,
-      boolean deprecated) {
-    this(
-        field,
-        accessFlags,
-        genericSignature,
-        annotations,
-        staticValue,
-        deprecated,
-        false,
-        AndroidApiLevel.UNKNOWN);
-  }
-
-  public DexEncodedField(
+  private DexEncodedField(
       DexField field,
       FieldAccessFlags accessFlags,
       FieldTypeSignature genericSignature,
@@ -382,6 +350,91 @@
     return new Builder(from);
   }
 
+  public static DexEncodedField create(DexField field, FieldAccessFlags accessFlags) {
+    return new DexEncodedField(
+        field,
+        accessFlags,
+        FieldTypeSignature.noSignature(),
+        DexAnnotationSet.empty(),
+        null,
+        false,
+        false,
+        AndroidApiLevel.UNKNOWN);
+  }
+
+  public static DexEncodedField create(
+      DexField field,
+      FieldAccessFlags accessFlags,
+      FieldTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      DexValue staticValue) {
+    return new DexEncodedField(
+        field,
+        accessFlags,
+        FieldTypeSignature.noSignature(),
+        DexAnnotationSet.empty(),
+        staticValue,
+        false,
+        false,
+        AndroidApiLevel.UNKNOWN);
+  }
+
+  public static DexEncodedField create(
+      DexField field,
+      FieldAccessFlags accessFlags,
+      FieldTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      DexValue staticValue,
+      boolean deprecated) {
+    return new DexEncodedField(
+        field,
+        accessFlags,
+        FieldTypeSignature.noSignature(),
+        DexAnnotationSet.empty(),
+        staticValue,
+        deprecated,
+        false,
+        AndroidApiLevel.UNKNOWN);
+  }
+
+  public static DexEncodedField create(
+      DexField field,
+      FieldAccessFlags accessFlags,
+      FieldTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      DexValue staticValue,
+      boolean deprecated,
+      AndroidApiLevel apiLevel) {
+    return new DexEncodedField(
+        field,
+        accessFlags,
+        FieldTypeSignature.noSignature(),
+        DexAnnotationSet.empty(),
+        staticValue,
+        deprecated,
+        false,
+        apiLevel);
+  }
+
+  public static DexEncodedField createSynthetic(
+      DexField field,
+      FieldAccessFlags accessFlags,
+      FieldTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      DexValue staticValue,
+      boolean deprecated,
+      AndroidApiLevel apiLevel) {
+    return new DexEncodedField(
+        field,
+        accessFlags,
+        FieldTypeSignature.noSignature(),
+        DexAnnotationSet.empty(),
+        staticValue,
+        deprecated,
+        true,
+        apiLevel);
+  }
+
   public static class Builder {
 
     private DexField field;
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index de21f86..c0e48dd 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -668,7 +668,7 @@
             createAnnotationSet(annotations, parent.application.options);
         DexValue staticValue = flags.isStatic() ? getStaticValue(value, dexField.type) : null;
         DexEncodedField field =
-            new DexEncodedField(
+            DexEncodedField.create(
                 dexField,
                 flags,
                 fieldSignature,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
index cab4112..99758bb 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
@@ -214,16 +214,14 @@
     assert mode.isInitial();
 
     boolean deprecated = false;
-    boolean d8R8Synthesized = true;
     DexEncodedField classIdField =
-        new DexEncodedField(
+        DexEncodedField.createSynthetic(
             group.getClassIdField(),
             FieldAccessFlags.createPublicFinalSynthetic(),
             FieldTypeSignature.noSignature(),
             DexAnnotationSet.empty(),
             null,
             deprecated,
-            d8R8Synthesized,
             minApiLevelIfEnabledOrUnknown(appView));
 
     // For the $r8$classId synthesized fields, we try to over-approximate the set of values it may
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 7946b24..7675b93 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -224,16 +224,14 @@
     List<DexEncodedField> fields = new ArrayList<>(fieldCount);
     for (int i = 0; i < fieldCount; i++) {
       boolean deprecated = false;
-      boolean d8R8Synthesized = true;
       fields.add(
-          new DexEncodedField(
+          DexEncodedField.createSynthetic(
               getCaptureField(i),
               FieldAccessFlags.createPublicFinalSynthetic(),
               FieldTypeSignature.noSignature(),
               DexAnnotationSet.empty(),
               null,
               deprecated,
-              d8R8Synthesized,
               // The api level is computed when tracing.
               AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView)));
     }
@@ -246,10 +244,9 @@
       // Create instance field for stateless lambda.
       assert this.lambdaField != null;
       boolean deprecated = false;
-      boolean d8R8Synthesized = true;
       builder.setStaticFields(
           Collections.singletonList(
-              new DexEncodedField(
+              DexEncodedField.createSynthetic(
                   this.lambdaField,
                   FieldAccessFlags.fromSharedAccessFlags(
                       Constants.ACC_PUBLIC
@@ -260,7 +257,6 @@
                   DexAnnotationSet.empty(),
                   DexValueNull.NULL,
                   deprecated,
-                  d8R8Synthesized,
                   // The api level is computed when tracing.
                   AndroidApiLevel.minApiLevelIfEnabledOrUnknown(appView))));
     }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
index a28f92a..44b8f39 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
@@ -686,7 +686,7 @@
     // Field is package private to be accessible from convert methods without a getter.
     FieldAccessFlags fieldAccessFlags =
         FieldAccessFlags.fromCfAccessFlags(Constants.ACC_FINAL | Constants.ACC_SYNTHETIC);
-    return new DexEncodedField(
+    return DexEncodedField.create(
         field, fieldAccessFlags, FieldTypeSignature.noSignature(), DexAnnotationSet.empty(), null);
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
index 5576f78..71bfd83 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
@@ -456,7 +456,7 @@
             dexItemFactory.intType,
             "$desugar$clinit",
             candidate -> iface.lookupField(candidate) == null);
-    return new DexEncodedField(
+    return DexEncodedField.create(
         clinitFieldReference,
         FieldAccessFlags.builder().setPackagePrivate().setStatic().setSynthetic().build(),
         FieldTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
index a0a79fc..0b05bb2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
@@ -226,7 +226,7 @@
 
     private DexEncodedField createValuesField(DexType sharedUtilityClassType) {
       DexEncodedField valuesField =
-          new DexEncodedField(
+          DexEncodedField.createSynthetic(
               dexItemFactory.createField(
                   sharedUtilityClassType, dexItemFactory.intArrayType, "$VALUES"),
               FieldAccessFlags.createPublicStaticFinalSynthetic(),
@@ -234,7 +234,6 @@
               DexAnnotationSet.empty(),
               DexEncodedField.NO_STATIC_VALUE,
               DexEncodedField.NOT_DEPRECATED,
-              DexEncodedField.D8_R8_SYNTHESIZED,
               minApiLevelIfEnabledOrUnknown(appView));
       fieldAccessInfoCollectionModifierBuilder
           .recordFieldReadInUnknownContext(valuesField.getReference())
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/LibraryFieldSynthesis.java
index c411d08..d50999c 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/LibraryFieldSynthesis.java
@@ -35,7 +35,7 @@
             DexEncodedField definition = enumClass.lookupField(field);
             if (definition == null) {
               enumClass.appendInstanceField(
-                  new DexEncodedField(
+                  DexEncodedField.create(
                       field,
                       FieldAccessFlags.fromCfAccessFlags(
                           Constants.ACC_PRIVATE | Constants.ACC_FINAL),
diff --git a/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java b/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java
index bfc3ae7..776b335 100644
--- a/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java
@@ -84,14 +84,13 @@
                   | Constants.ACC_STATIC);
       boolean deprecated = false;
       encodedClinitField =
-          new DexEncodedField(
+          DexEncodedField.createSynthetic(
               appView.dexItemFactory().createField(clazz.type, clinitField.type, clinitField.name),
               accessFlags,
               FieldTypeSignature.noSignature(),
               DexAnnotationSet.empty(),
               null,
               deprecated,
-              DexEncodedField.D8_R8_SYNTHESIZED,
               minApiLevelIfEnabledOrUnknown(appView));
       clazz.appendStaticField(encodedClinitField);
     }