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