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);
}