summaryrefslogtreecommitdiff
path: root/tests/Codegen/src/com/android/codegentest/SampleDataClass.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Codegen/src/com/android/codegentest/SampleDataClass.java')
-rw-r--r--tests/Codegen/src/com/android/codegentest/SampleDataClass.java800
1 files changed, 533 insertions, 267 deletions
diff --git a/tests/Codegen/src/com/android/codegentest/SampleDataClass.java b/tests/Codegen/src/com/android/codegentest/SampleDataClass.java
index f69a092ed3f7..b30fde4e9c47 100644
--- a/tests/Codegen/src/com/android/codegentest/SampleDataClass.java
+++ b/tests/Codegen/src/com/android/codegentest/SampleDataClass.java
@@ -53,11 +53,13 @@ import java.util.regex.Pattern;
// genAidl = true, // implied by `implements Parcelable`
// genGetters = true, // on by default
// genConstDefs = true, // implied by presence of constants with common prefix
+ genBuilder = true, // on by default if optional fields present, but suppressed by
+ // genConstructor
+ genConstructor = true, // on by default but normally suppressed by genBuilder
genEqualsHashCode = true,
- genBuilder = true,
genToString = true,
genForEachField = true,
- genConstructor = true // on by default but normally suppressed by genBuilder
+ genSetters = true
)
public final class SampleDataClass implements Parcelable {
@@ -136,48 +138,53 @@ public final class SampleDataClass implements Parcelable {
private int mNum4;
/**
- * {@link Nullable} fields are considered optional and will not throw an exception if omitted
- * (or set to null) when creating an instance either via a {@link Builder} or constructor.
+ * {@link Nullable} or {@link NonNull} annotation is required on all non-primitive fields.
*/
private @Nullable String mName;
/**
- * Fields with default value expressions ("mFoo = ...") are also optional, and are automatically
+ * Fields with default value expressions ("mFoo = ...") are optional, and are automatically
* initialized to the provided default expression, unless explicitly set.
+ *
+ * When using a {@link Builder} optional fields are passed via a {@link Builder#setName2 setter}
+ * while mandatory fields are passed via {@link Builder#Builder constructor}.
*/
- private String mName2 = "Bob";
+ private @NonNull String mName2 = "Bob";
/**
- * Fields without {@link Nullable} annotation or default value are considered required.
- *
- * {@link NonNull} annotation is recommended on such non-primitive fields for documentation.
+ * Alternatively, when default value computation is expensive,
+ * {@link #defaultName4 defaultFieldName()} can be defined to compute the default value.
*/
private @NonNull String mName4;
+ private static String defaultName4() {
+ // Expensive computation
+ return "Bob4";
+ }
/**
* For parcelling, any field type supported by {@link Parcel} is supported out of the box.
* E.g. {@link Parcelable} subclasses, {@link String}, {@link int}, {@link boolean}, etc.
*/
- private AccessibilityNodeInfo mOtherParcelable = null;
+ private @Nullable AccessibilityNodeInfo mOtherParcelable = null;
/**
* Additionally, support for parcelling other types can be added by implementing a
* {@link Parcelling}, and referencing it in the {@link DataClass.ParcelWith} field annotation.
*
- * @see DateParcelling an example {@link Parcelling} implementation
+ * @see MyDateParcelling an example {@link Parcelling} implementation
*/
- @DataClass.ParcelWith(DateParcelling.class)
- private Date mDate = new Date(42 * 42);
+ @DataClass.ParcelWith(MyDateParcelling.class)
+ private @NonNull Date mDate = new Date(42 * 42);
/**
* If a {@link Parcelling} is fairly common, consider putting it in {@link Parcelling.BuiltIn}
* to encourage its reuse.
*/
@DataClass.ParcelWith(Parcelling.BuiltIn.ForPattern.class)
- private Pattern mPattern = Pattern.compile("");
+ private @NonNull Pattern mPattern = Pattern.compile("");
/**
* For lists, when using a {@link Builder}, other than a regular
* {@link Builder#setLinkAddresses2(List) setter}, and additional
* {@link Builder#addLinkAddresses2(LinkAddress) add} method is generated for convenience.
*/
- private List<LinkAddress> mLinkAddresses2 = new ArrayList<>();
+ private @NonNull List<LinkAddress> mLinkAddresses2 = new ArrayList<>();
/**
* For aesthetics, you may want to consider providing a singular version of the plural field
* name, which would be used for the {@link #mLinkAddresses2 above mentioned} "add" method.
@@ -185,7 +192,7 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#addLinkAddress(LinkAddress)
*/
@DataClass.PluralOf("linkAddress")
- private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>();
+ private @NonNull ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>();
/**
* For array fields, when using a {@link Builder}, vararg argument format is used for
* convenience.
@@ -193,11 +200,6 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#setLinkAddresses4(LinkAddress...)
*/
private @Nullable LinkAddress[] mLinkAddresses4 = null;
- /**
- * For boolean fields, when using a {@link Builder}, in addition to a regular setter, methods
- * like {@link Builder#markActive()} and {@link Builder#markNotActive()} are generated.
- */
- private boolean mActive = true;
/**
* {@link IntDef}/{@link StringDef}-annotated fields propagate the annotation to
@@ -206,7 +208,7 @@ public final class SampleDataClass implements Parcelable {
* @see #getStateName
* @see Builder#setStateName
*/
- private @StateName String mStateName = STATE_NAME_UNDEFINED;
+ private @StateName @NonNull String mStateName = STATE_NAME_UNDEFINED;
/**
* Fields annotated with {@link IntDef} annotations also get a proper {@link #toString()} value.
*/
@@ -220,11 +222,11 @@ public final class SampleDataClass implements Parcelable {
/**
* Making a field public will suppress getter generation in favor of accessing it directly.
*/
- public CharSequence charSeq = "";
+ public @NonNull CharSequence charSeq = "";
/**
* Final fields suppress generating a setter (when setters are requested).
*/
- private final LinkAddress[] mLinkAddresses5;
+ private final @Nullable LinkAddress[] mLinkAddresses5;
/**
* Transient fields are completely ignored and can be used for caching.
*/
@@ -261,7 +263,7 @@ public final class SampleDataClass implements Parcelable {
*
* @see AnnotationValidations#validate(Class, Size, int, String, int, String, int)
*/
- private @android.annotation.IntRange(from = 0, to = 4) int mLimited = 3;
+ private @android.annotation.IntRange(from = 0, to = 6) int mDayOfWeek = 3;
/**
* Unnamed validation annotation parameter gets supplied to the validating method named as
* "value".
@@ -272,6 +274,7 @@ public final class SampleDataClass implements Parcelable {
* @see AnnotationValidations#validate(Class, Size, int, String, int)
*/
@Size(2)
+ @NonNull
@Each @FloatRange(from = 0f)
private float[] mCoords = new float[] {0f, 0f};
@@ -340,7 +343,6 @@ public final class SampleDataClass implements Parcelable {
// Code below generated by codegen v1.0.0.
- // on Jul 29, 2019, 2:50:21 PM PDT
//
// DO NOT MODIFY!
//
@@ -408,13 +410,9 @@ public final class SampleDataClass implements Parcelable {
@DataClass.Generated.Member
public @interface StateName {}
- @DataClass.Generated(
- time = 1564437021513L,
- codegenVersion = "1.0.0",
- sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java",
- inputSignatures = "public static final java.lang.String STATE_NAME_UNDEFINED\npublic static final java.lang.String STATE_NAME_ON\npublic static final java.lang.String STATE_NAME_OFF\npublic static final int STATE_UNDEFINED\npublic static final int STATE_ON\npublic static final int STATE_OFF\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_AUGMENTED_REQUEST\nprivate int mNum\nprivate int mNum2\nprivate int mNum4\nprivate @android.annotation.Nullable java.lang.String mName\nprivate java.lang.String mName2\nprivate @android.annotation.NonNull java.lang.String mName4\nprivate android.view.accessibility.AccessibilityNodeInfo mOtherParcelable\nprivate @com.android.internal.util.DataClass.ParcelWith(com.android.codegentest.DateParcelling.class) java.util.Date mDate\nprivate @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForPattern.class) java.util.regex.Pattern mPattern\nprivate java.util.List<android.net.LinkAddress> mLinkAddresses2\nprivate @com.android.internal.util.DataClass.PluralOf(\"linkAddress\") java.util.ArrayList<android.net.LinkAddress> mLinkAddresses\nprivate @android.annotation.Nullable android.net.LinkAddress[] mLinkAddresses4\nprivate boolean mActive\nprivate @com.android.codegentest.SampleDataClass.StateName java.lang.String mStateName\nprivate @com.android.codegentest.SampleDataClass.RequestFlags int mFlags\nprivate @com.android.codegentest.SampleDataClass.State int mState\npublic java.lang.CharSequence charSeq\nprivate final android.net.LinkAddress[] mLinkAddresses5\nprivate transient android.net.LinkAddress[] mLinkAddresses6\ntransient int[] mTmpStorage\nprivate @android.annotation.StringRes int mStringRes\nprivate @android.annotation.IntRange(from=0L, to=4L) int mLimited\nprivate @android.annotation.Size(2L) @com.android.internal.util.DataClass.Each @android.annotation.FloatRange(from=0.0) float[] mCoords\nprivate int[] lazyInitTmpStorage()\npublic android.net.LinkAddress[] getLinkAddresses4()\nprivate boolean patternEquals(java.util.regex.Pattern)\nprivate int patternHashCode()\nprivate void onConstructed()\npublic void dump(java.io.PrintWriter)")
-
-/**
+ /**
+ * Creates a new SampleDataClass.
+ *
* @param num
* Any property javadoc should go onto the field, and will be copied where appropriate,
* including getters, constructor parameters, builder setters, etc.
@@ -429,15 +427,16 @@ public final class SampleDataClass implements Parcelable {
* {@code @hide} javadoc annotation is also propagated, which can be used to adjust the
* desired public API surface.
* @param name
- * {@link Nullable} fields are considered optional and will not throw an exception if omitted
- * (or set to null) when creating an instance either via a {@link Builder} or constructor.
+ * {@link Nullable} or {@link NonNull} annotation is required on all non-primitive fields.
* @param name2
- * Fields with default value expressions ("mFoo = ...") are also optional, and are automatically
+ * Fields with default value expressions ("mFoo = ...") are optional, and are automatically
* initialized to the provided default expression, unless explicitly set.
- * @param name4
- * Fields without {@link Nullable} annotation or default value are considered required.
*
- * {@link NonNull} annotation is recommended on such non-primitive fields for documentation.
+ * When using a {@link Builder} optional fields are passed via a {@link Builder#setName2 setter}
+ * while mandatory fields are passed via {@link Builder#Builder constructor}.
+ * @param name4
+ * Alternatively, when default value computation is expensive,
+ * {@link #defaultName4 defaultFieldName()} can be defined to compute the default value.
* @param otherParcelable
* For parcelling, any field type supported by {@link Parcel} is supported out of the box.
* E.g. {@link Parcelable} subclasses, {@link String}, {@link int}, {@link boolean}, etc.
@@ -457,9 +456,6 @@ public final class SampleDataClass implements Parcelable {
* @param linkAddresses4
* For array fields, when using a {@link Builder}, vararg argument format is used for
* convenience.
- * @param active
- * For boolean fields, when using a {@link Builder}, in addition to a regular setter, methods
- * like {@link Builder#markActive()} and {@link Builder#markNotActive()} are generated.
* @param stateName
* {@link IntDef}/{@link StringDef}-annotated fields propagate the annotation to
* getter/constructor/setter/builder parameters, making for a nicer api.
@@ -480,7 +476,7 @@ public final class SampleDataClass implements Parcelable {
* You can also extend support to your custom annotations by creating another corresponding
* overloads like
* {@link AnnotationValidations#validate(Class, UserIdInt, int)}.
- * @param limited
+ * @param dayOfWeek
* Validation annotations may also have parameters.
*
* Parameter values will be supplied to validation method as name-value pairs.
@@ -497,50 +493,49 @@ public final class SampleDataClass implements Parcelable {
int num2,
int num4,
@Nullable String name,
- String name2,
+ @NonNull String name2,
@NonNull String name4,
- AccessibilityNodeInfo otherParcelable,
- Date date,
- Pattern pattern,
- List<LinkAddress> linkAddresses2,
- ArrayList<LinkAddress> linkAddresses,
+ @Nullable AccessibilityNodeInfo otherParcelable,
+ @NonNull Date date,
+ @NonNull Pattern pattern,
+ @NonNull List<LinkAddress> linkAddresses2,
+ @NonNull ArrayList<LinkAddress> linkAddresses,
@Nullable LinkAddress[] linkAddresses4,
- boolean active,
- @StateName String stateName,
+ @StateName @NonNull String stateName,
@RequestFlags int flags,
@State int state,
- CharSequence charSeq,
- LinkAddress[] linkAddresses5,
+ @NonNull CharSequence charSeq,
+ @Nullable LinkAddress[] linkAddresses5,
@StringRes int stringRes,
- @android.annotation.IntRange(from = 0, to = 4) int limited,
- @Size(2) @FloatRange(from = 0f) float[] coords) {
+ @android.annotation.IntRange(from = 0, to = 6) int dayOfWeek,
+ @Size(2) @NonNull @Each @FloatRange(from = 0f) float[] coords) {
this.mNum = num;
this.mNum2 = num2;
this.mNum4 = num4;
this.mName = name;
this.mName2 = name2;
- this.mName4 = Preconditions.checkNotNull(name4);
+ AnnotationValidations.validate(
+ NonNull.class, null, mName2);
+ this.mName4 = name4;
+ AnnotationValidations.validate(
+ NonNull.class, null, mName4);
this.mOtherParcelable = otherParcelable;
this.mDate = date;
+ AnnotationValidations.validate(
+ NonNull.class, null, mDate);
this.mPattern = pattern;
+ AnnotationValidations.validate(
+ NonNull.class, null, mPattern);
this.mLinkAddresses2 = linkAddresses2;
+ AnnotationValidations.validate(
+ NonNull.class, null, mLinkAddresses2);
this.mLinkAddresses = linkAddresses;
+ AnnotationValidations.validate(
+ NonNull.class, null, mLinkAddresses);
this.mLinkAddresses4 = linkAddresses4;
- this.mActive = active;
this.mStateName = stateName;
- this.mFlags = flags;
- this.mState = state;
- this.charSeq = charSeq;
- this.mLinkAddresses5 = linkAddresses5;
- this.mStringRes = stringRes;
- this.mLimited = limited;
- this.mCoords = coords;
- AnnotationValidations.validate(
- NonNull.class, null, mName4);
- //noinspection PointlessBooleanExpression
- if (true
- && !(Objects.equals(mStateName, STATE_NAME_UNDEFINED))
+ if (!(Objects.equals(mStateName, STATE_NAME_UNDEFINED))
&& !(Objects.equals(mStateName, STATE_NAME_ON))
&& !(Objects.equals(mStateName, STATE_NAME_OFF))) {
throw new java.lang.IllegalArgumentException(
@@ -550,17 +545,18 @@ public final class SampleDataClass implements Parcelable {
+ "STATE_NAME_OFF(" + STATE_NAME_OFF + ")");
}
+ AnnotationValidations.validate(
+ NonNull.class, null, mStateName);
+ this.mFlags = flags;
- //noinspection PointlessBitwiseExpression
Preconditions.checkFlagsArgument(
- mFlags, 0
- | FLAG_MANUAL_REQUEST
+ mFlags,
+ FLAG_MANUAL_REQUEST
| FLAG_COMPATIBILITY_MODE_REQUEST
| FLAG_AUGMENTED_REQUEST);
+ this.mState = state;
- //noinspection PointlessBooleanExpression
- if (true
- && !(mState == STATE_UNDEFINED)
+ if (!(mState == STATE_UNDEFINED)
&& !(mState == STATE_ON)
&& !(mState == STATE_OFF)) {
throw new java.lang.IllegalArgumentException(
@@ -570,15 +566,24 @@ public final class SampleDataClass implements Parcelable {
+ "STATE_OFF(" + STATE_OFF + ")");
}
+ this.charSeq = charSeq;
+ AnnotationValidations.validate(
+ NonNull.class, null, charSeq);
+ this.mLinkAddresses5 = linkAddresses5;
+ this.mStringRes = stringRes;
AnnotationValidations.validate(
StringRes.class, null, mStringRes);
+ this.mDayOfWeek = dayOfWeek;
AnnotationValidations.validate(
- android.annotation.IntRange.class, null, mLimited,
+ android.annotation.IntRange.class, null, mDayOfWeek,
"from", 0,
- "to", 4);
+ "to", 6);
+ this.mCoords = coords;
AnnotationValidations.validate(
Size.class, null, mCoords.length,
"value", 2);
+ AnnotationValidations.validate(
+ NonNull.class, null, mCoords);
int coordsSize = mCoords.length;
for (int i = 0; i < coordsSize; i++) {
AnnotationValidations.validate(
@@ -628,8 +633,7 @@ public final class SampleDataClass implements Parcelable {
}
/**
- * {@link Nullable} fields are considered optional and will not throw an exception if omitted
- * (or set to null) when creating an instance either via a {@link Builder} or constructor.
+ * {@link Nullable} or {@link NonNull} annotation is required on all non-primitive fields.
*/
@DataClass.Generated.Member
public @Nullable String getName() {
@@ -637,18 +641,20 @@ public final class SampleDataClass implements Parcelable {
}
/**
- * Fields with default value expressions ("mFoo = ...") are also optional, and are automatically
+ * Fields with default value expressions ("mFoo = ...") are optional, and are automatically
* initialized to the provided default expression, unless explicitly set.
+ *
+ * When using a {@link Builder} optional fields are passed via a {@link Builder#setName2 setter}
+ * while mandatory fields are passed via {@link Builder#Builder constructor}.
*/
@DataClass.Generated.Member
- public String getName2() {
+ public @NonNull String getName2() {
return mName2;
}
/**
- * Fields without {@link Nullable} annotation or default value are considered required.
- *
- * {@link NonNull} annotation is recommended on such non-primitive fields for documentation.
+ * Alternatively, when default value computation is expensive,
+ * {@link #defaultName4 defaultFieldName()} can be defined to compute the default value.
*/
@DataClass.Generated.Member
public @NonNull String getName4() {
@@ -660,7 +666,7 @@ public final class SampleDataClass implements Parcelable {
* E.g. {@link Parcelable} subclasses, {@link String}, {@link int}, {@link boolean}, etc.
*/
@DataClass.Generated.Member
- public AccessibilityNodeInfo getOtherParcelable() {
+ public @Nullable AccessibilityNodeInfo getOtherParcelable() {
return mOtherParcelable;
}
@@ -668,10 +674,10 @@ public final class SampleDataClass implements Parcelable {
* Additionally, support for parcelling other types can be added by implementing a
* {@link Parcelling}, and referencing it in the {@link DataClass.ParcelWith} field annotation.
*
- * @see DateParcelling an example {@link Parcelling} implementation
+ * @see MyDateParcelling an example {@link Parcelling} implementation
*/
@DataClass.Generated.Member
- public Date getDate() {
+ public @NonNull Date getDate() {
return mDate;
}
@@ -680,7 +686,7 @@ public final class SampleDataClass implements Parcelable {
* to encourage its reuse.
*/
@DataClass.Generated.Member
- public Pattern getPattern() {
+ public @NonNull Pattern getPattern() {
return mPattern;
}
@@ -690,7 +696,7 @@ public final class SampleDataClass implements Parcelable {
* {@link Builder#addLinkAddresses2(LinkAddress) add} method is generated for convenience.
*/
@DataClass.Generated.Member
- public List<LinkAddress> getLinkAddresses2() {
+ public @NonNull List<LinkAddress> getLinkAddresses2() {
return mLinkAddresses2;
}
@@ -701,20 +707,11 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#addLinkAddress(LinkAddress)
*/
@DataClass.Generated.Member
- public ArrayList<LinkAddress> getLinkAddresses() {
+ public @NonNull ArrayList<LinkAddress> getLinkAddresses() {
return mLinkAddresses;
}
/**
- * For boolean fields, when using a {@link Builder}, in addition to a regular setter, methods
- * like {@link Builder#markActive()} and {@link Builder#markNotActive()} are generated.
- */
- @DataClass.Generated.Member
- public boolean isActive() {
- return mActive;
- }
-
- /**
* {@link IntDef}/{@link StringDef}-annotated fields propagate the annotation to
* getter/constructor/setter/builder parameters, making for a nicer api.
*
@@ -722,7 +719,7 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#setStateName
*/
@DataClass.Generated.Member
- public @StateName String getStateName() {
+ public @StateName @NonNull String getStateName() {
return mStateName;
}
@@ -746,7 +743,7 @@ public final class SampleDataClass implements Parcelable {
* Final fields suppress generating a setter (when setters are requested).
*/
@DataClass.Generated.Member
- public LinkAddress[] getLinkAddresses5() {
+ public @Nullable LinkAddress[] getLinkAddresses5() {
return mLinkAddresses5;
}
@@ -775,8 +772,8 @@ public final class SampleDataClass implements Parcelable {
* @see AnnotationValidations#validate(Class, Size, int, String, int, String, int)
*/
@DataClass.Generated.Member
- public @android.annotation.IntRange(from = 0, to = 4) int getLimited() {
- return mLimited;
+ public @android.annotation.IntRange(from = 0, to = 6) int getDayOfWeek() {
+ return mDayOfWeek;
}
/**
@@ -789,7 +786,7 @@ public final class SampleDataClass implements Parcelable {
* @see AnnotationValidations#validate(Class, Size, int, String, int)
*/
@DataClass.Generated.Member
- public @Size(2) @FloatRange(from = 0f) float[] getCoords() {
+ public @Size(2) @NonNull @Each @FloatRange(from = 0f) float[] getCoords() {
return mCoords;
}
@@ -810,6 +807,282 @@ public final class SampleDataClass implements Parcelable {
return tmpStorage;
}
+ /**
+ * Any property javadoc should go onto the field, and will be copied where appropriate,
+ * including getters, constructor parameters, builder setters, etc.
+ *
+ * <p>
+ * This allows to avoid the burden of maintaining copies of the same documentation
+ * pieces in multiple places for each field.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setNum(int value) {
+ mNum = value;
+ return this;
+ }
+
+ /**
+ * Various javadoc features should work as expected when copied, e.g {@code code},
+ * {@link #mName links}, <a href="https://google.com">html links</a>, etc.
+ *
+ * @see #mNum2 ..and so should blocks at the bottom, e.g. {@code @see} blocks.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setNum2(int value) {
+ mNum2 = value;
+ return this;
+ }
+
+ /**
+ * {@code @hide} javadoc annotation is also propagated, which can be used to adjust the
+ * desired public API surface.
+ *
+ * @see #getNum4() is hidden
+ * @see Builder#setNum4(int) also hidden
+ * @hide
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setNum4(int value) {
+ mNum4 = value;
+ return this;
+ }
+
+ /**
+ * {@link Nullable} or {@link NonNull} annotation is required on all non-primitive fields.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setName(@Nullable String value) {
+ mName = value;
+ return this;
+ }
+
+ /**
+ * Fields with default value expressions ("mFoo = ...") are optional, and are automatically
+ * initialized to the provided default expression, unless explicitly set.
+ *
+ * When using a {@link Builder} optional fields are passed via a {@link Builder#setName2 setter}
+ * while mandatory fields are passed via {@link Builder#Builder constructor}.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setName2(@NonNull String value) {
+ mName2 = value;
+ AnnotationValidations.validate(
+ NonNull.class, null, mName2);
+ return this;
+ }
+
+ /**
+ * Alternatively, when default value computation is expensive,
+ * {@link #defaultName4 defaultFieldName()} can be defined to compute the default value.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setName4(@NonNull String value) {
+ mName4 = value;
+ AnnotationValidations.validate(
+ NonNull.class, null, mName4);
+ return this;
+ }
+
+ /**
+ * For parcelling, any field type supported by {@link Parcel} is supported out of the box.
+ * E.g. {@link Parcelable} subclasses, {@link String}, {@link int}, {@link boolean}, etc.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setOtherParcelable(@Nullable AccessibilityNodeInfo value) {
+ mOtherParcelable = value;
+ return this;
+ }
+
+ /**
+ * Additionally, support for parcelling other types can be added by implementing a
+ * {@link Parcelling}, and referencing it in the {@link DataClass.ParcelWith} field annotation.
+ *
+ * @see MyDateParcelling an example {@link Parcelling} implementation
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setDate(@NonNull Date value) {
+ mDate = value;
+ AnnotationValidations.validate(
+ NonNull.class, null, mDate);
+ return this;
+ }
+
+ /**
+ * If a {@link Parcelling} is fairly common, consider putting it in {@link Parcelling.BuiltIn}
+ * to encourage its reuse.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setPattern(@NonNull Pattern value) {
+ mPattern = value;
+ AnnotationValidations.validate(
+ NonNull.class, null, mPattern);
+ return this;
+ }
+
+ /**
+ * For lists, when using a {@link Builder}, other than a regular
+ * {@link Builder#setLinkAddresses2(List) setter}, and additional
+ * {@link Builder#addLinkAddresses2(LinkAddress) add} method is generated for convenience.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setLinkAddresses2(@NonNull List<LinkAddress> value) {
+ mLinkAddresses2 = value;
+ AnnotationValidations.validate(
+ NonNull.class, null, mLinkAddresses2);
+ return this;
+ }
+
+ /**
+ * For aesthetics, you may want to consider providing a singular version of the plural field
+ * name, which would be used for the {@link #mLinkAddresses2 above mentioned} "add" method.
+ *
+ * @see Builder#addLinkAddress(LinkAddress)
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setLinkAddresses(@NonNull ArrayList<LinkAddress> value) {
+ mLinkAddresses = value;
+ AnnotationValidations.validate(
+ NonNull.class, null, mLinkAddresses);
+ return this;
+ }
+
+ /**
+ * For array fields, when using a {@link Builder}, vararg argument format is used for
+ * convenience.
+ *
+ * @see Builder#setLinkAddresses4(LinkAddress...)
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setLinkAddresses4(@Nullable LinkAddress... value) {
+ mLinkAddresses4 = value;
+ return this;
+ }
+
+ /**
+ * {@link IntDef}/{@link StringDef}-annotated fields propagate the annotation to
+ * getter/constructor/setter/builder parameters, making for a nicer api.
+ *
+ * @see #getStateName
+ * @see Builder#setStateName
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setStateName(@StateName @NonNull String value) {
+ mStateName = value;
+
+ if (!(Objects.equals(mStateName, STATE_NAME_UNDEFINED))
+ && !(Objects.equals(mStateName, STATE_NAME_ON))
+ && !(Objects.equals(mStateName, STATE_NAME_OFF))) {
+ throw new java.lang.IllegalArgumentException(
+ "stateName was " + mStateName + " but must be one of: "
+ + "STATE_NAME_UNDEFINED(" + STATE_NAME_UNDEFINED + "), "
+ + "STATE_NAME_ON(" + STATE_NAME_ON + "), "
+ + "STATE_NAME_OFF(" + STATE_NAME_OFF + ")");
+ }
+
+ AnnotationValidations.validate(
+ NonNull.class, null, mStateName);
+ return this;
+ }
+
+ /**
+ * Fields annotated with {@link IntDef} annotations also get a proper {@link #toString()} value.
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setFlags(@RequestFlags int value) {
+ mFlags = value;
+
+ Preconditions.checkFlagsArgument(
+ mFlags,
+ FLAG_MANUAL_REQUEST
+ | FLAG_COMPATIBILITY_MODE_REQUEST
+ | FLAG_AUGMENTED_REQUEST);
+ return this;
+ }
+
+ /**
+ * Above is true for both {@link IntDef#flag flags} and enum-like {@link IntDef}s
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setState(@State int value) {
+ mState = value;
+
+ if (!(mState == STATE_UNDEFINED)
+ && !(mState == STATE_ON)
+ && !(mState == STATE_OFF)) {
+ throw new java.lang.IllegalArgumentException(
+ "state was " + mState + " but must be one of: "
+ + "STATE_UNDEFINED(" + STATE_UNDEFINED + "), "
+ + "STATE_ON(" + STATE_ON + "), "
+ + "STATE_OFF(" + STATE_OFF + ")");
+ }
+
+ return this;
+ }
+
+ /**
+ * Fields with certain annotations are automatically validated in constructor
+ *
+ * You can see overloads in {@link AnnotationValidations} for a list of currently
+ * supported ones.
+ *
+ * You can also extend support to your custom annotations by creating another corresponding
+ * overloads like
+ * {@link AnnotationValidations#validate(Class, UserIdInt, int)}.
+ *
+ * @see #SampleDataClass
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setStringRes(@StringRes int value) {
+ mStringRes = value;
+ AnnotationValidations.validate(
+ StringRes.class, null, mStringRes);
+ return this;
+ }
+
+ /**
+ * Validation annotations may also have parameters.
+ *
+ * Parameter values will be supplied to validation method as name-value pairs.
+ *
+ * @see AnnotationValidations#validate(Class, Size, int, String, int, String, int)
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setDayOfWeek(@android.annotation.IntRange(from = 0, to = 6) int value) {
+ mDayOfWeek = value;
+ AnnotationValidations.validate(
+ android.annotation.IntRange.class, null, mDayOfWeek,
+ "from", 0,
+ "to", 6);
+ return this;
+ }
+
+ /**
+ * Unnamed validation annotation parameter gets supplied to the validating method named as
+ * "value".
+ *
+ * Validation annotations following {@link Each} annotation, will be applied for each
+ * array/collection element instead.
+ *
+ * @see AnnotationValidations#validate(Class, Size, int, String, int)
+ */
+ @DataClass.Generated.Member
+ public SampleDataClass setCoords(@Size(2) @NonNull @Each @FloatRange(from = 0f) float... value) {
+ mCoords = value;
+ AnnotationValidations.validate(
+ Size.class, null, mCoords.length,
+ "value", 2);
+ AnnotationValidations.validate(
+ NonNull.class, null, mCoords);
+ int coordsSize = mCoords.length;
+ for (int i = 0; i < coordsSize; i++) {
+ AnnotationValidations.validate(
+ FloatRange.class, null, mCoords[i],
+ "from", 0f);
+ }
+
+ return this;
+ }
+
@Override
@DataClass.Generated.Member
public String toString() {
@@ -829,14 +1102,13 @@ public final class SampleDataClass implements Parcelable {
"linkAddresses2 = " + mLinkAddresses2 + ", " +
"linkAddresses = " + mLinkAddresses + ", " +
"linkAddresses4 = " + java.util.Arrays.toString(mLinkAddresses4) + ", " +
- "active = " + mActive + ", " +
"stateName = " + mStateName + ", " +
"flags = " + requestFlagsToString(mFlags) + ", " +
"state = " + stateToString(mState) + ", " +
"charSeq = " + charSeq + ", " +
"linkAddresses5 = " + java.util.Arrays.toString(mLinkAddresses5) + ", " +
"stringRes = " + mStringRes + ", " +
- "limited = " + mLimited + ", " +
+ "dayOfWeek = " + mDayOfWeek + ", " +
"coords = " + java.util.Arrays.toString(mCoords) +
" }";
}
@@ -866,14 +1138,13 @@ public final class SampleDataClass implements Parcelable {
&& Objects.equals(mLinkAddresses2, that.mLinkAddresses2)
&& Objects.equals(mLinkAddresses, that.mLinkAddresses)
&& java.util.Arrays.equals(mLinkAddresses4, that.mLinkAddresses4)
- && mActive == that.mActive
&& Objects.equals(mStateName, that.mStateName)
&& mFlags == that.mFlags
&& mState == that.mState
&& Objects.equals(charSeq, that.charSeq)
&& java.util.Arrays.equals(mLinkAddresses5, that.mLinkAddresses5)
&& mStringRes == that.mStringRes
- && mLimited == that.mLimited
+ && mDayOfWeek == that.mDayOfWeek
&& java.util.Arrays.equals(mCoords, that.mCoords);
}
@@ -896,14 +1167,13 @@ public final class SampleDataClass implements Parcelable {
_hash = 31 * _hash + Objects.hashCode(mLinkAddresses2);
_hash = 31 * _hash + Objects.hashCode(mLinkAddresses);
_hash = 31 * _hash + java.util.Arrays.hashCode(mLinkAddresses4);
- _hash = 31 * _hash + Boolean.hashCode(mActive);
_hash = 31 * _hash + Objects.hashCode(mStateName);
_hash = 31 * _hash + mFlags;
_hash = 31 * _hash + mState;
_hash = 31 * _hash + Objects.hashCode(charSeq);
_hash = 31 * _hash + java.util.Arrays.hashCode(mLinkAddresses5);
_hash = 31 * _hash + mStringRes;
- _hash = 31 * _hash + mLimited;
+ _hash = 31 * _hash + mDayOfWeek;
_hash = 31 * _hash + java.util.Arrays.hashCode(mCoords);
return _hash;
}
@@ -924,14 +1194,13 @@ public final class SampleDataClass implements Parcelable {
actionObject.acceptObject(this, "linkAddresses2", mLinkAddresses2);
actionObject.acceptObject(this, "linkAddresses", mLinkAddresses);
actionObject.acceptObject(this, "linkAddresses4", mLinkAddresses4);
- actionObject.acceptObject(this, "active", mActive);
actionObject.acceptObject(this, "stateName", mStateName);
actionInt.acceptInt(this, "flags", mFlags);
actionInt.acceptInt(this, "state", mState);
actionObject.acceptObject(this, "charSeq", charSeq);
actionObject.acceptObject(this, "linkAddresses5", mLinkAddresses5);
actionInt.acceptInt(this, "stringRes", mStringRes);
- actionInt.acceptInt(this, "limited", mLimited);
+ actionInt.acceptInt(this, "dayOfWeek", mDayOfWeek);
actionObject.acceptObject(this, "coords", mCoords);
}
@@ -951,25 +1220,24 @@ public final class SampleDataClass implements Parcelable {
action.acceptObject(this, "linkAddresses2", mLinkAddresses2);
action.acceptObject(this, "linkAddresses", mLinkAddresses);
action.acceptObject(this, "linkAddresses4", mLinkAddresses4);
- action.acceptObject(this, "active", mActive);
action.acceptObject(this, "stateName", mStateName);
action.acceptObject(this, "flags", mFlags);
action.acceptObject(this, "state", mState);
action.acceptObject(this, "charSeq", charSeq);
action.acceptObject(this, "linkAddresses5", mLinkAddresses5);
action.acceptObject(this, "stringRes", mStringRes);
- action.acceptObject(this, "limited", mLimited);
+ action.acceptObject(this, "dayOfWeek", mDayOfWeek);
action.acceptObject(this, "coords", mCoords);
}
@DataClass.Generated.Member
static Parcelling<Date> sParcellingForDate =
Parcelling.Cache.get(
- DateParcelling.class);
+ MyDateParcelling.class);
static {
if (sParcellingForDate == null) {
sParcellingForDate = Parcelling.Cache.put(
- new DateParcelling());
+ new MyDateParcelling());
}
}
@@ -991,40 +1259,31 @@ public final class SampleDataClass implements Parcelable {
// void parcelFieldName(Parcel dest, int flags) { ... }
long flg = 0;
- if (mActive) flg |= 0x1000;
if (mName != null) flg |= 0x8;
- if (mName2 != null) flg |= 0x10;
if (mOtherParcelable != null) flg |= 0x40;
- if (mDate != null) flg |= 0x80;
- if (mPattern != null) flg |= 0x100;
- if (mLinkAddresses2 != null) flg |= 0x200;
- if (mLinkAddresses != null) flg |= 0x400;
if (mLinkAddresses4 != null) flg |= 0x800;
- if (mStateName != null) flg |= 0x2000;
- if (charSeq != null) flg |= 0x10000;
- if (mLinkAddresses5 != null) flg |= 0x20000;
- if (mCoords != null) flg |= 0x100000;
+ if (mLinkAddresses5 != null) flg |= 0x10000;
dest.writeLong(flg);
dest.writeInt(mNum);
dest.writeInt(mNum2);
dest.writeInt(mNum4);
if (mName != null) dest.writeString(mName);
- if (mName2 != null) dest.writeString(mName2);
+ dest.writeString(mName2);
dest.writeString(mName4);
if (mOtherParcelable != null) dest.writeTypedObject(mOtherParcelable, flags);
sParcellingForDate.parcel(mDate, dest, flags);
sParcellingForPattern.parcel(mPattern, dest, flags);
- if (mLinkAddresses2 != null) dest.writeParcelableList(mLinkAddresses2, flags);
- if (mLinkAddresses != null) dest.writeParcelableList(mLinkAddresses, flags);
+ dest.writeParcelableList(mLinkAddresses2, flags);
+ dest.writeParcelableList(mLinkAddresses, flags);
if (mLinkAddresses4 != null) dest.writeTypedArray(mLinkAddresses4, flags);
- if (mStateName != null) dest.writeString(mStateName);
+ dest.writeString(mStateName);
dest.writeInt(mFlags);
dest.writeInt(mState);
- if (charSeq != null) dest.writeCharSequence(charSeq);
+ dest.writeCharSequence(charSeq);
if (mLinkAddresses5 != null) dest.writeTypedArray(mLinkAddresses5, flags);
dest.writeInt(mStringRes);
- dest.writeInt(mLimited);
- if (mCoords != null) dest.writeFloatArray(mCoords);
+ dest.writeInt(mDayOfWeek);
+ dest.writeFloatArray(mCoords);
}
@Override
@@ -1046,35 +1305,28 @@ public final class SampleDataClass implements Parcelable {
// static FieldType unparcelFieldName(Parcel in) { ... }
long flg = in.readLong();
- boolean active = (flg & 0x1000) != 0;
int num = in.readInt();
int num2 = in.readInt();
int num4 = in.readInt();
String name = (flg & 0x8) == 0 ? null : in.readString();
- String name2 = (flg & 0x10) == 0 ? null : in.readString();
+ String name2 = in.readString();
String name4 = in.readString();
AccessibilityNodeInfo otherParcelable = (flg & 0x40) == 0 ? null : (AccessibilityNodeInfo) in.readTypedObject(AccessibilityNodeInfo.CREATOR);
Date date = sParcellingForDate.unparcel(in);
Pattern pattern = sParcellingForPattern.unparcel(in);
- List<LinkAddress> linkAddresses2 = null;
- if ((flg & 0x200) != 0) {
- linkAddresses2 = new ArrayList<>();
- in.readParcelableList(linkAddresses2, LinkAddress.class.getClassLoader());
- }
- ArrayList<LinkAddress> linkAddresses = null;
- if ((flg & 0x400) != 0) {
- linkAddresses = new ArrayList<>();
- in.readParcelableList(linkAddresses, LinkAddress.class.getClassLoader());
- }
+ List<LinkAddress> linkAddresses2 = new ArrayList<>();
+ in.readParcelableList(linkAddresses2, LinkAddress.class.getClassLoader());
+ ArrayList<LinkAddress> linkAddresses = new ArrayList<>();
+ in.readParcelableList(linkAddresses, LinkAddress.class.getClassLoader());
LinkAddress[] linkAddresses4 = (flg & 0x800) == 0 ? null : (LinkAddress[]) in.createTypedArray(LinkAddress.CREATOR);
- String stateName = (flg & 0x2000) == 0 ? null : in.readString();
+ String stateName = in.readString();
int flags = in.readInt();
int state = in.readInt();
- CharSequence _charSeq = (flg & 0x10000) == 0 ? null : (CharSequence) in.readCharSequence();
- LinkAddress[] linkAddresses5 = (flg & 0x20000) == 0 ? null : (LinkAddress[]) in.createTypedArray(LinkAddress.CREATOR);
+ CharSequence _charSeq = (CharSequence) in.readCharSequence();
+ LinkAddress[] linkAddresses5 = (flg & 0x10000) == 0 ? null : (LinkAddress[]) in.createTypedArray(LinkAddress.CREATOR);
int stringRes = in.readInt();
- int limited = in.readInt();
- float[] coords = (flg & 0x100000) == 0 ? null : in.createFloatArray();
+ int dayOfWeek = in.readInt();
+ float[] coords = in.createFloatArray();
return new SampleDataClass(
num,
num2,
@@ -1088,14 +1340,13 @@ public final class SampleDataClass implements Parcelable {
linkAddresses2,
linkAddresses,
linkAddresses4,
- active,
stateName,
flags,
state,
_charSeq,
linkAddresses5,
stringRes,
- limited,
+ dayOfWeek,
coords);
}
};
@@ -1105,34 +1356,74 @@ public final class SampleDataClass implements Parcelable {
*/
@SuppressWarnings("WeakerAccess")
@DataClass.Generated.Member
- public static class Builder
- extends android.provider.OneTimeUseBuilder<SampleDataClass> {
-
- protected int mNum;
- protected int mNum2;
- protected int mNum4;
- protected @Nullable String mName;
- protected String mName2;
- protected @NonNull String mName4;
- protected AccessibilityNodeInfo mOtherParcelable;
- protected Date mDate;
- protected Pattern mPattern;
- protected List<LinkAddress> mLinkAddresses2;
- protected ArrayList<LinkAddress> mLinkAddresses;
- protected @Nullable LinkAddress[] mLinkAddresses4;
- protected boolean mActive;
- protected @StateName String mStateName;
- protected @RequestFlags int mFlags;
- protected @State int mState;
- protected CharSequence charSeq;
- protected LinkAddress[] mLinkAddresses5;
- protected @StringRes int mStringRes;
- protected @android.annotation.IntRange(from = 0, to = 4) int mLimited;
- protected @Size(2) @FloatRange(from = 0f) float[] mCoords;
-
- protected long mBuilderFieldsSet = 0L;
-
- public Builder() {};
+ public static class Builder {
+
+ private int mNum;
+ private int mNum2;
+ private int mNum4;
+ private @Nullable String mName;
+ private @NonNull String mName2;
+ private @NonNull String mName4;
+ private @Nullable AccessibilityNodeInfo mOtherParcelable;
+ private @NonNull Date mDate;
+ private @NonNull Pattern mPattern;
+ private @NonNull List<LinkAddress> mLinkAddresses2;
+ private @NonNull ArrayList<LinkAddress> mLinkAddresses;
+ private @Nullable LinkAddress[] mLinkAddresses4;
+ private @StateName @NonNull String mStateName;
+ private @RequestFlags int mFlags;
+ private @State int mState;
+ private @NonNull CharSequence charSeq;
+ private @Nullable LinkAddress[] mLinkAddresses5;
+ private @StringRes int mStringRes;
+ private @android.annotation.IntRange(from = 0, to = 6) int mDayOfWeek;
+ private @Size(2) @NonNull @Each @FloatRange(from = 0f) float[] mCoords;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param num
+ * Any property javadoc should go onto the field, and will be copied where appropriate,
+ * including getters, constructor parameters, builder setters, etc.
+ *
+ * <p>
+ * This allows to avoid the burden of maintaining copies of the same documentation
+ * pieces in multiple places for each field.
+ * @param num2
+ * Various javadoc features should work as expected when copied, e.g {@code code},
+ * {@link #mName links}, <a href="https://google.com">html links</a>, etc.
+ * @param num4
+ * {@code @hide} javadoc annotation is also propagated, which can be used to adjust the
+ * desired public API surface.
+ * @param name
+ * {@link Nullable} or {@link NonNull} annotation is required on all non-primitive fields.
+ * @param flags
+ * Fields annotated with {@link IntDef} annotations also get a proper {@link #toString()} value.
+ * @param linkAddresses5
+ * Final fields suppress generating a setter (when setters are requested).
+ */
+ public Builder(
+ int num,
+ int num2,
+ int num4,
+ @Nullable String name,
+ @RequestFlags int flags,
+ @Nullable LinkAddress[] linkAddresses5) {
+ mNum = num;
+ mNum2 = num2;
+ mNum4 = num4;
+ mName = name;
+ mFlags = flags;
+
+ Preconditions.checkFlagsArgument(
+ mFlags,
+ FLAG_MANUAL_REQUEST
+ | FLAG_COMPATIBILITY_MODE_REQUEST
+ | FLAG_AUGMENTED_REQUEST);
+ mLinkAddresses5 = linkAddresses5;
+ }
/**
* Any property javadoc should go onto the field, and will be copied where appropriate,
@@ -1143,7 +1434,7 @@ public final class SampleDataClass implements Parcelable {
* pieces in multiple places for each field.
*/
@DataClass.Generated.Member
- public Builder setNum(int value) {
+ public @NonNull Builder setNum(int value) {
checkNotUsed();
mBuilderFieldsSet |= 0x1;
mNum = value;
@@ -1157,7 +1448,7 @@ public final class SampleDataClass implements Parcelable {
* @see #mNum2 ..and so should blocks at the bottom, e.g. {@code @see} blocks.
*/
@DataClass.Generated.Member
- public Builder setNum2(int value) {
+ public @NonNull Builder setNum2(int value) {
checkNotUsed();
mBuilderFieldsSet |= 0x2;
mNum2 = value;
@@ -1173,7 +1464,7 @@ public final class SampleDataClass implements Parcelable {
* @hide
*/
@DataClass.Generated.Member
- public Builder setNum4(int value) {
+ public @NonNull Builder setNum4(int value) {
checkNotUsed();
mBuilderFieldsSet |= 0x4;
mNum4 = value;
@@ -1181,11 +1472,10 @@ public final class SampleDataClass implements Parcelable {
}
/**
- * {@link Nullable} fields are considered optional and will not throw an exception if omitted
- * (or set to null) when creating an instance either via a {@link Builder} or constructor.
+ * {@link Nullable} or {@link NonNull} annotation is required on all non-primitive fields.
*/
@DataClass.Generated.Member
- public Builder setName(@Nullable String value) {
+ public @NonNull Builder setName(@Nullable String value) {
checkNotUsed();
mBuilderFieldsSet |= 0x8;
mName = value;
@@ -1193,11 +1483,14 @@ public final class SampleDataClass implements Parcelable {
}
/**
- * Fields with default value expressions ("mFoo = ...") are also optional, and are automatically
+ * Fields with default value expressions ("mFoo = ...") are optional, and are automatically
* initialized to the provided default expression, unless explicitly set.
+ *
+ * When using a {@link Builder} optional fields are passed via a {@link Builder#setName2 setter}
+ * while mandatory fields are passed via {@link Builder#Builder constructor}.
*/
@DataClass.Generated.Member
- public Builder setName2(String value) {
+ public @NonNull Builder setName2(@NonNull String value) {
checkNotUsed();
mBuilderFieldsSet |= 0x10;
mName2 = value;
@@ -1205,12 +1498,11 @@ public final class SampleDataClass implements Parcelable {
}
/**
- * Fields without {@link Nullable} annotation or default value are considered required.
- *
- * {@link NonNull} annotation is recommended on such non-primitive fields for documentation.
+ * Alternatively, when default value computation is expensive,
+ * {@link #defaultName4 defaultFieldName()} can be defined to compute the default value.
*/
@DataClass.Generated.Member
- public Builder setName4(@NonNull String value) {
+ public @NonNull Builder setName4(@NonNull String value) {
checkNotUsed();
mBuilderFieldsSet |= 0x20;
mName4 = value;
@@ -1222,7 +1514,7 @@ public final class SampleDataClass implements Parcelable {
* E.g. {@link Parcelable} subclasses, {@link String}, {@link int}, {@link boolean}, etc.
*/
@DataClass.Generated.Member
- public Builder setOtherParcelable(AccessibilityNodeInfo value) {
+ public @NonNull Builder setOtherParcelable(@Nullable AccessibilityNodeInfo value) {
checkNotUsed();
mBuilderFieldsSet |= 0x40;
mOtherParcelable = value;
@@ -1233,10 +1525,10 @@ public final class SampleDataClass implements Parcelable {
* Additionally, support for parcelling other types can be added by implementing a
* {@link Parcelling}, and referencing it in the {@link DataClass.ParcelWith} field annotation.
*
- * @see DateParcelling an example {@link Parcelling} implementation
+ * @see MyDateParcelling an example {@link Parcelling} implementation
*/
@DataClass.Generated.Member
- public Builder setDate(Date value) {
+ public @NonNull Builder setDate(@NonNull Date value) {
checkNotUsed();
mBuilderFieldsSet |= 0x80;
mDate = value;
@@ -1248,7 +1540,7 @@ public final class SampleDataClass implements Parcelable {
* to encourage its reuse.
*/
@DataClass.Generated.Member
- public Builder setPattern(Pattern value) {
+ public @NonNull Builder setPattern(@NonNull Pattern value) {
checkNotUsed();
mBuilderFieldsSet |= 0x100;
mPattern = value;
@@ -1261,7 +1553,7 @@ public final class SampleDataClass implements Parcelable {
* {@link Builder#addLinkAddresses2(LinkAddress) add} method is generated for convenience.
*/
@DataClass.Generated.Member
- public Builder setLinkAddresses2(List<LinkAddress> value) {
+ public @NonNull Builder setLinkAddresses2(@NonNull List<LinkAddress> value) {
checkNotUsed();
mBuilderFieldsSet |= 0x200;
mLinkAddresses2 = value;
@@ -1270,7 +1562,7 @@ public final class SampleDataClass implements Parcelable {
/** @see #setLinkAddresses2 */
@DataClass.Generated.Member
- public Builder addLinkAddresses2(@NonNull LinkAddress value) {
+ public @NonNull Builder addLinkAddresses2(LinkAddress value) {
// You can refine this method's name by providing item's singular name, e.g.:
// @DataClass.PluralOf("item")) mItems = ...
@@ -1286,7 +1578,7 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#addLinkAddress(LinkAddress)
*/
@DataClass.Generated.Member
- public Builder setLinkAddresses(ArrayList<LinkAddress> value) {
+ public @NonNull Builder setLinkAddresses(@NonNull ArrayList<LinkAddress> value) {
checkNotUsed();
mBuilderFieldsSet |= 0x400;
mLinkAddresses = value;
@@ -1295,7 +1587,7 @@ public final class SampleDataClass implements Parcelable {
/** @see #setLinkAddresses */
@DataClass.Generated.Member
- public Builder addLinkAddress(@NonNull LinkAddress value) {
+ public @NonNull Builder addLinkAddress(LinkAddress value) {
if (mLinkAddresses == null) setLinkAddresses(new ArrayList<>());
mLinkAddresses.add(value);
return this;
@@ -1308,7 +1600,7 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#setLinkAddresses4(LinkAddress...)
*/
@DataClass.Generated.Member
- public Builder setLinkAddresses4(@Nullable LinkAddress... value) {
+ public @NonNull Builder setLinkAddresses4(@Nullable LinkAddress... value) {
checkNotUsed();
mBuilderFieldsSet |= 0x800;
mLinkAddresses4 = value;
@@ -1316,30 +1608,6 @@ public final class SampleDataClass implements Parcelable {
}
/**
- * For boolean fields, when using a {@link Builder}, in addition to a regular setter, methods
- * like {@link Builder#markActive()} and {@link Builder#markNotActive()} are generated.
- */
- @DataClass.Generated.Member
- public Builder setActive(boolean value) {
- checkNotUsed();
- mBuilderFieldsSet |= 0x1000;
- mActive = value;
- return this;
- }
-
- /** @see #setActive */
- @DataClass.Generated.Member
- public Builder markActive() {
- return setActive(true);
- }
-
- /** @see #setActive */
- @DataClass.Generated.Member
- public Builder markNotActive() {
- return setActive(false);
- }
-
- /**
* {@link IntDef}/{@link StringDef}-annotated fields propagate the annotation to
* getter/constructor/setter/builder parameters, making for a nicer api.
*
@@ -1347,9 +1615,9 @@ public final class SampleDataClass implements Parcelable {
* @see Builder#setStateName
*/
@DataClass.Generated.Member
- public Builder setStateName(@StateName String value) {
+ public @NonNull Builder setStateName(@StateName @NonNull String value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x2000;
+ mBuilderFieldsSet |= 0x1000;
mStateName = value;
return this;
}
@@ -1358,9 +1626,9 @@ public final class SampleDataClass implements Parcelable {
* Fields annotated with {@link IntDef} annotations also get a proper {@link #toString()} value.
*/
@DataClass.Generated.Member
- public Builder setFlags(@RequestFlags int value) {
+ public @NonNull Builder setFlags(@RequestFlags int value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x4000;
+ mBuilderFieldsSet |= 0x2000;
mFlags = value;
return this;
}
@@ -1369,9 +1637,9 @@ public final class SampleDataClass implements Parcelable {
* Above is true for both {@link IntDef#flag flags} and enum-like {@link IntDef}s
*/
@DataClass.Generated.Member
- public Builder setState(@State int value) {
+ public @NonNull Builder setState(@State int value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x8000;
+ mBuilderFieldsSet |= 0x4000;
mState = value;
return this;
}
@@ -1380,9 +1648,9 @@ public final class SampleDataClass implements Parcelable {
* Making a field public will suppress getter generation in favor of accessing it directly.
*/
@DataClass.Generated.Member
- public Builder setCharSeq(CharSequence value) {
+ public @NonNull Builder setCharSeq(@NonNull CharSequence value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x10000;
+ mBuilderFieldsSet |= 0x8000;
charSeq = value;
return this;
}
@@ -1391,9 +1659,9 @@ public final class SampleDataClass implements Parcelable {
* Final fields suppress generating a setter (when setters are requested).
*/
@DataClass.Generated.Member
- public Builder setLinkAddresses5(LinkAddress... value) {
+ public @NonNull Builder setLinkAddresses5(@Nullable LinkAddress... value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x20000;
+ mBuilderFieldsSet |= 0x10000;
mLinkAddresses5 = value;
return this;
}
@@ -1411,9 +1679,9 @@ public final class SampleDataClass implements Parcelable {
* @see #SampleDataClass
*/
@DataClass.Generated.Member
- public Builder setStringRes(@StringRes int value) {
+ public @NonNull Builder setStringRes(@StringRes int value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x40000;
+ mBuilderFieldsSet |= 0x20000;
mStringRes = value;
return this;
}
@@ -1426,10 +1694,10 @@ public final class SampleDataClass implements Parcelable {
* @see AnnotationValidations#validate(Class, Size, int, String, int, String, int)
*/
@DataClass.Generated.Member
- public Builder setLimited(@android.annotation.IntRange(from = 0, to = 4) int value) {
+ public @NonNull Builder setDayOfWeek(@android.annotation.IntRange(from = 0, to = 6) int value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x80000;
- mLimited = value;
+ mBuilderFieldsSet |= 0x40000;
+ mDayOfWeek = value;
return this;
}
@@ -1443,30 +1711,23 @@ public final class SampleDataClass implements Parcelable {
* @see AnnotationValidations#validate(Class, Size, int, String, int)
*/
@DataClass.Generated.Member
- public Builder setCoords(@Size(2) @FloatRange(from = 0f) float... value) {
+ public @NonNull Builder setCoords(@Size(2) @NonNull @Each @FloatRange(from = 0f) float... value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x100000;
+ mBuilderFieldsSet |= 0x80000;
mCoords = value;
return this;
}
/** Builds the instance. This builder should not be touched after calling this! */
public SampleDataClass build() {
- markUsed();
- if ((mBuilderFieldsSet & 0x1) == 0) {
- throw new IllegalStateException("Required field not set: num");
- }
- if ((mBuilderFieldsSet & 0x2) == 0) {
- throw new IllegalStateException("Required field not set: num2");
- }
- if ((mBuilderFieldsSet & 0x4) == 0) {
- throw new IllegalStateException("Required field not set: num4");
- }
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x100000; // Mark builder used
+
if ((mBuilderFieldsSet & 0x10) == 0) {
mName2 = "Bob";
}
if ((mBuilderFieldsSet & 0x20) == 0) {
- throw new IllegalStateException("Required field not set: name4");
+ mName4 = defaultName4();
}
if ((mBuilderFieldsSet & 0x40) == 0) {
mOtherParcelable = null;
@@ -1487,30 +1748,21 @@ public final class SampleDataClass implements Parcelable {
mLinkAddresses4 = null;
}
if ((mBuilderFieldsSet & 0x1000) == 0) {
- mActive = true;
- }
- if ((mBuilderFieldsSet & 0x2000) == 0) {
mStateName = STATE_NAME_UNDEFINED;
}
if ((mBuilderFieldsSet & 0x4000) == 0) {
- throw new IllegalStateException("Required field not set: flags");
- }
- if ((mBuilderFieldsSet & 0x8000) == 0) {
mState = STATE_UNDEFINED;
}
- if ((mBuilderFieldsSet & 0x10000) == 0) {
+ if ((mBuilderFieldsSet & 0x8000) == 0) {
charSeq = "";
}
if ((mBuilderFieldsSet & 0x20000) == 0) {
- throw new IllegalStateException("Required field not set: linkAddresses5");
+ mStringRes = 0;
}
if ((mBuilderFieldsSet & 0x40000) == 0) {
- mStringRes = 0;
+ mDayOfWeek = 3;
}
if ((mBuilderFieldsSet & 0x80000) == 0) {
- mLimited = 3;
- }
- if ((mBuilderFieldsSet & 0x100000) == 0) {
mCoords = new float[] { 0f, 0f };
}
SampleDataClass o = new SampleDataClass(
@@ -1526,17 +1778,31 @@ public final class SampleDataClass implements Parcelable {
mLinkAddresses2,
mLinkAddresses,
mLinkAddresses4,
- mActive,
mStateName,
mFlags,
mState,
charSeq,
mLinkAddresses5,
mStringRes,
- mLimited,
+ mDayOfWeek,
mCoords);
return o;
}
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x100000) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
}
+ @DataClass.Generated(
+ time = 1565048798524L,
+ codegenVersion = "1.0.0",
+ sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java",
+ inputSignatures = "public static final java.lang.String STATE_NAME_UNDEFINED\npublic static final java.lang.String STATE_NAME_ON\npublic static final java.lang.String STATE_NAME_OFF\npublic static final int STATE_UNDEFINED\npublic static final int STATE_ON\npublic static final int STATE_OFF\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_AUGMENTED_REQUEST\nprivate int mNum\nprivate int mNum2\nprivate int mNum4\nprivate @android.annotation.Nullable java.lang.String mName\nprivate @android.annotation.NonNull java.lang.String mName2\nprivate @android.annotation.NonNull java.lang.String mName4\nprivate @android.annotation.Nullable android.view.accessibility.AccessibilityNodeInfo mOtherParcelable\nprivate @com.android.internal.util.DataClass.ParcelWith(com.android.codegentest.MyDateParcelling.class) @android.annotation.NonNull java.util.Date mDate\nprivate @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForPattern.class) @android.annotation.NonNull java.util.regex.Pattern mPattern\nprivate @android.annotation.NonNull java.util.List<android.net.LinkAddress> mLinkAddresses2\nprivate @com.android.internal.util.DataClass.PluralOf(\"linkAddress\") @android.annotation.NonNull java.util.ArrayList<android.net.LinkAddress> mLinkAddresses\nprivate @android.annotation.Nullable android.net.LinkAddress[] mLinkAddresses4\nprivate @com.android.codegentest.SampleDataClass.StateName @android.annotation.NonNull java.lang.String mStateName\nprivate @com.android.codegentest.SampleDataClass.RequestFlags int mFlags\nprivate @com.android.codegentest.SampleDataClass.State int mState\npublic @android.annotation.NonNull java.lang.CharSequence charSeq\nprivate final @android.annotation.Nullable android.net.LinkAddress[] mLinkAddresses5\nprivate transient android.net.LinkAddress[] mLinkAddresses6\ntransient int[] mTmpStorage\nprivate @android.annotation.StringRes int mStringRes\nprivate @android.annotation.IntRange(from=0L, to=6L) int mDayOfWeek\nprivate @android.annotation.Size(2L) @android.annotation.NonNull @com.android.internal.util.DataClass.Each @android.annotation.FloatRange(from=0.0) float[] mCoords\nprivate static java.lang.String defaultName4()\nprivate int[] lazyInitTmpStorage()\npublic android.net.LinkAddress[] getLinkAddresses4()\nprivate boolean patternEquals(java.util.regex.Pattern)\nprivate int patternHashCode()\nprivate void onConstructed()\npublic void dump(java.io.PrintWriter)\nclass SampleDataClass extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genBuilder=true, genConstructor=true, genEqualsHashCode=true, genToString=true, genForEachField=true, genSetters=true)")
+ @Deprecated
+ private void __metadata() {}
+
}