Loading tests/Codegen/runTest.sh +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,7 @@ else header_and_eval m -j16 codegen_cli && \ header_and_eval m -j16 codegen_cli && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java && \ cd $ANDROID_BUILD_TOP && cd $ANDROID_BUILD_TOP && header_and_eval mmma -j16 frameworks/base/tests/Codegen && \ header_and_eval mmma -j16 frameworks/base/tests/Codegen && \ header_and_eval adb install -r -t $ANDROID_PRODUCT_OUT/testcases/CodegenTests/arm64/CodegenTests.apk && \ header_and_eval adb install -r -t $ANDROID_PRODUCT_OUT/testcases/CodegenTests/arm64/CodegenTests.apk && \ Loading tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java 0 → 100644 +362 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.codegentest; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; import android.util.SparseIntArray; import com.android.internal.util.AnnotationValidations; import com.android.internal.util.DataClass; import java.util.List; import java.util.Map; /** * Additional test for various parcelling corner-cases. */ @DataClass( genBuilder = true, genAidl = false, genToString = true) public class ParcelAllTheThingsDataClass implements Parcelable { @NonNull String[] mStringArray = null; @NonNull int[] mIntArray = null; @NonNull List<String> mStringList = null; @NonNull Map<String, SampleWithCustomBuilder> mMap = null; @NonNull Map<String, String> mStringMap = null; @NonNull SparseArray<SampleWithCustomBuilder> mSparseArray = null; @NonNull SparseIntArray mSparseIntArray = null; // Code below generated by codegen v1.0.4. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // // To regenerate run: // $ codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java @DataClass.Generated.Member /* package-private */ ParcelAllTheThingsDataClass( @NonNull String[] stringArray, @NonNull int[] intArray, @NonNull List<String> stringList, @NonNull Map<String,SampleWithCustomBuilder> map, @NonNull Map<String,String> stringMap, @NonNull SparseArray<SampleWithCustomBuilder> sparseArray, @NonNull SparseIntArray sparseIntArray) { this.mStringArray = stringArray; AnnotationValidations.validate( NonNull.class, null, mStringArray); this.mIntArray = intArray; AnnotationValidations.validate( NonNull.class, null, mIntArray); this.mStringList = stringList; AnnotationValidations.validate( NonNull.class, null, mStringList); this.mMap = map; AnnotationValidations.validate( NonNull.class, null, mMap); this.mStringMap = stringMap; AnnotationValidations.validate( NonNull.class, null, mStringMap); this.mSparseArray = sparseArray; AnnotationValidations.validate( NonNull.class, null, mSparseArray); this.mSparseIntArray = sparseIntArray; AnnotationValidations.validate( NonNull.class, null, mSparseIntArray); // onConstructed(); // You can define this method to get a callback } @DataClass.Generated.Member public @NonNull String[] getStringArray() { return mStringArray; } @DataClass.Generated.Member public @NonNull int[] getIntArray() { return mIntArray; } @DataClass.Generated.Member public @NonNull List<String> getStringList() { return mStringList; } @DataClass.Generated.Member public @NonNull Map<String,SampleWithCustomBuilder> getMap() { return mMap; } @DataClass.Generated.Member public @NonNull Map<String,String> getStringMap() { return mStringMap; } @DataClass.Generated.Member public @NonNull SparseArray<SampleWithCustomBuilder> getSparseArray() { return mSparseArray; } @DataClass.Generated.Member public @NonNull SparseIntArray getSparseIntArray() { return mSparseIntArray; } @Override @DataClass.Generated.Member public String toString() { // You can override field toString logic by defining methods like: // String fieldNameToString() { ... } return "ParcelAllTheThingsDataClass { " + "stringArray = " + java.util.Arrays.toString(mStringArray) + ", " + "intArray = " + java.util.Arrays.toString(mIntArray) + ", " + "stringList = " + mStringList + ", " + "map = " + mMap + ", " + "stringMap = " + mStringMap + ", " + "sparseArray = " + mSparseArray + ", " + "sparseIntArray = " + mSparseIntArray + " }"; } @Override @DataClass.Generated.Member public void writeToParcel(Parcel dest, int flags) { // You can override field parcelling by defining methods like: // void parcelFieldName(Parcel dest, int flags) { ... } dest.writeStringArray(mStringArray); dest.writeIntArray(mIntArray); dest.writeStringList(mStringList); dest.writeMap(mMap); dest.writeMap(mStringMap); dest.writeSparseArray(mSparseArray); dest.writeSparseIntArray(mSparseIntArray); } @Override @DataClass.Generated.Member public int describeContents() { return 0; } @DataClass.Generated.Member public static final @NonNull Parcelable.Creator<ParcelAllTheThingsDataClass> CREATOR = new Parcelable.Creator<ParcelAllTheThingsDataClass>() { @Override public ParcelAllTheThingsDataClass[] newArray(int size) { return new ParcelAllTheThingsDataClass[size]; } @Override @SuppressWarnings({"unchecked", "RedundantCast"}) public ParcelAllTheThingsDataClass createFromParcel(Parcel in) { // You can override field unparcelling by defining methods like: // static FieldType unparcelFieldName(Parcel in) { ... } String[] stringArray = in.createStringArray(); int[] intArray = in.createIntArray(); List<String> stringList = new java.util.ArrayList<>(); in.readStringList(stringList); Map<String,SampleWithCustomBuilder> map = new java.util.LinkedHashMap<>(); in.readMap(map, SampleWithCustomBuilder.class.getClassLoader()); Map<String,String> stringMap = new java.util.LinkedHashMap<>(); in.readMap(stringMap, String.class.getClassLoader()); SparseArray<SampleWithCustomBuilder> sparseArray = (SparseArray) in.readSparseArray(SampleWithCustomBuilder.class.getClassLoader()); SparseIntArray sparseIntArray = (SparseIntArray) in.readSparseIntArray(); return new ParcelAllTheThingsDataClass( stringArray, intArray, stringList, map, stringMap, sparseArray, sparseIntArray); } }; /** * A builder for {@link ParcelAllTheThingsDataClass} */ @SuppressWarnings("WeakerAccess") @DataClass.Generated.Member public static class Builder { private @NonNull String[] mStringArray; private @NonNull int[] mIntArray; private @NonNull List<String> mStringList; private @NonNull Map<String,SampleWithCustomBuilder> mMap; private @NonNull Map<String,String> mStringMap; private @NonNull SparseArray<SampleWithCustomBuilder> mSparseArray; private @NonNull SparseIntArray mSparseIntArray; private long mBuilderFieldsSet = 0L; public Builder() { } @DataClass.Generated.Member public @NonNull Builder setStringArray(@NonNull String... value) { checkNotUsed(); mBuilderFieldsSet |= 0x1; mStringArray = value; return this; } @DataClass.Generated.Member public @NonNull Builder setIntArray(@NonNull int... value) { checkNotUsed(); mBuilderFieldsSet |= 0x2; mIntArray = value; return this; } @DataClass.Generated.Member public @NonNull Builder setStringList(@NonNull List<String> value) { checkNotUsed(); mBuilderFieldsSet |= 0x4; mStringList = value; return this; } /** @see #setStringList */ @DataClass.Generated.Member public @NonNull Builder addStringList(String value) { // You can refine this method's name by providing item's singular name, e.g.: // @DataClass.PluralOf("item")) mItems = ... if (mStringList == null) setStringList(new java.util.ArrayList<>()); mStringList.add(value); return this; } @DataClass.Generated.Member public @NonNull Builder setMap(@NonNull Map<String,SampleWithCustomBuilder> value) { checkNotUsed(); mBuilderFieldsSet |= 0x8; mMap = value; return this; } /** @see #setMap */ @DataClass.Generated.Member public @NonNull Builder addMap(String key, SampleWithCustomBuilder value) { // You can refine this method's name by providing item's singular name, e.g.: // @DataClass.PluralOf("item")) mItems = ... if (mMap == null) setMap(new java.util.LinkedHashMap()); mMap.put(key, value); return this; } @DataClass.Generated.Member public @NonNull Builder setStringMap(@NonNull Map<String,String> value) { checkNotUsed(); mBuilderFieldsSet |= 0x10; mStringMap = value; return this; } /** @see #setStringMap */ @DataClass.Generated.Member public @NonNull Builder addStringMap(String key, String value) { // You can refine this method's name by providing item's singular name, e.g.: // @DataClass.PluralOf("item")) mItems = ... if (mStringMap == null) setStringMap(new java.util.LinkedHashMap()); mStringMap.put(key, value); return this; } @DataClass.Generated.Member public @NonNull Builder setSparseArray(@NonNull SparseArray<SampleWithCustomBuilder> value) { checkNotUsed(); mBuilderFieldsSet |= 0x20; mSparseArray = value; return this; } @DataClass.Generated.Member public @NonNull Builder setSparseIntArray(@NonNull SparseIntArray value) { checkNotUsed(); mBuilderFieldsSet |= 0x40; mSparseIntArray = value; return this; } /** Builds the instance. This builder should not be touched after calling this! */ public ParcelAllTheThingsDataClass build() { checkNotUsed(); mBuilderFieldsSet |= 0x80; // Mark builder used if ((mBuilderFieldsSet & 0x1) == 0) { mStringArray = null; } if ((mBuilderFieldsSet & 0x2) == 0) { mIntArray = null; } if ((mBuilderFieldsSet & 0x4) == 0) { mStringList = null; } if ((mBuilderFieldsSet & 0x8) == 0) { mMap = null; } if ((mBuilderFieldsSet & 0x10) == 0) { mStringMap = null; } if ((mBuilderFieldsSet & 0x20) == 0) { mSparseArray = null; } if ((mBuilderFieldsSet & 0x40) == 0) { mSparseIntArray = null; } ParcelAllTheThingsDataClass o = new ParcelAllTheThingsDataClass( mStringArray, mIntArray, mStringList, mMap, mStringMap, mSparseArray, mSparseIntArray); return o; } private void checkNotUsed() { if ((mBuilderFieldsSet & 0x80) != 0) { throw new IllegalStateException( "This Builder should not be reused. Use a new Builder instance instead"); } } } @DataClass.Generated( time = 1570139502128L, codegenVersion = "1.0.4", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java", inputSignatures = " @android.annotation.NonNull java.lang.String[] mStringArray\n @android.annotation.NonNull int[] mIntArray\n @android.annotation.NonNull java.util.List<java.lang.String> mStringList\n @android.annotation.NonNull java.util.Map<java.lang.String,com.android.codegentest.SampleWithCustomBuilder> mMap\n @android.annotation.NonNull java.util.Map<java.lang.String,java.lang.String> mStringMap\n @android.annotation.NonNull android.util.SparseArray<com.android.codegentest.SampleWithCustomBuilder> mSparseArray\n @android.annotation.NonNull android.util.SparseIntArray mSparseIntArray\nclass ParcelAllTheThingsDataClass extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genBuilder=true, genAidl=false, genToString=true)") @Deprecated private void __metadata() {} } tests/Codegen/src/com/android/codegentest/SampleDataClass.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -342,7 +342,7 @@ public final class SampleDataClass implements Parcelable { // Code below generated by codegen v1.0.3. // Code below generated by codegen v1.0.4. // // // DO NOT MODIFY! // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // CHECKSTYLE:OFF Generated code Loading Loading @@ -1798,8 +1798,8 @@ public final class SampleDataClass implements Parcelable { } } @DataClass.Generated( @DataClass.Generated( time = 1569956013899L, time = 1570139500112L, codegenVersion = "1.0.3", codegenVersion = "1.0.4", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java", 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)") 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 @Deprecated Loading tests/Codegen/src/com/android/codegentest/SampleDataClassTest.java +34 −0 Original line number Original line Diff line number Diff line Loading @@ -25,9 +25,14 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import android.net.LinkAddress; import android.net.LinkAddress; import android.os.Bundle; import android.os.Parcel; import android.os.Parcel; import android.os.Parcelable; import android.os.Parcelable; import android.util.SparseArray; import android.util.SparseIntArray; import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4; Loading @@ -36,6 +41,9 @@ import org.junit.runner.RunWith; import java.util.Arrays; import java.util.Arrays; import java.util.Date; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger; /** /** Loading Loading @@ -209,6 +217,32 @@ public class SampleDataClassTest { newBuilder().setDayOfWeek(42).build(); newBuilder().setDayOfWeek(42).build(); } } @Test public void testDataStructures_parcelCorrectly() { SampleWithCustomBuilder otherParcelable = new SampleWithCustomBuilder.Builder().setDelay(3, SECONDS).build(); ParcelAllTheThingsDataClass instance = new ParcelAllTheThingsDataClass.Builder() .setIntArray(40, 41) .addMap("foo", otherParcelable) .setSparseArray(new SparseArray<SampleWithCustomBuilder>() {{ put(45, otherParcelable); }}) .setSparseIntArray(new SparseIntArray() {{ put(48, 49); }}) .addStringMap("foo2", "fooValue") .setStringArray("foo", "bar") .addStringList("foo") .build(); ParcelAllTheThingsDataClass unparceledInstance = parcelAndUnparcel(instance, ParcelAllTheThingsDataClass.CREATOR); // SparseArray and friends don't implement equals // so just compare string representations instead assertEquals(instance.toString(), unparceledInstance.toString()); } private static <T extends Parcelable> T parcelAndUnparcel( private static <T extends Parcelable> T parcelAndUnparcel( T original, Parcelable.Creator<T> creator) { T original, Parcelable.Creator<T> creator) { Parcel p = Parcel.obtain(); Parcel p = Parcel.obtain(); Loading tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java +69 −6 Original line number Original line Diff line number Diff line Loading @@ -17,14 +17,16 @@ package com.android.codegentest; package com.android.codegentest; import android.annotation.NonNull; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; import android.os.SystemClock; import com.android.internal.util.DataClass; import com.android.internal.util.DataClass; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; @DataClass(genBuilder = true) @DataClass(genBuilder = true, genAidl = false, genToString = true) public class SampleWithCustomBuilder { public class SampleWithCustomBuilder implements Parcelable { long delayAmount = 0; long delayAmount = 0; @NonNull @NonNull Loading Loading @@ -73,8 +75,17 @@ public class SampleWithCustomBuilder { } } private static TimeUnit unparcelDelayUnit(Parcel p) { return TimeUnit.values()[p.readInt()]; } private void parcelDelayUnit(Parcel p, int flags) { p.writeInt(delayUnit.ordinal()); } // Code below generated by codegen v1.0.3. // Code below generated by codegen v1.0.4. // // // DO NOT MODIFY! // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // CHECKSTYLE:OFF Generated code Loading Loading @@ -112,6 +123,58 @@ public class SampleWithCustomBuilder { return creationTimestamp; return creationTimestamp; } } @Override @DataClass.Generated.Member public String toString() { // You can override field toString logic by defining methods like: // String fieldNameToString() { ... } return "SampleWithCustomBuilder { " + "delayAmount = " + delayAmount + ", " + "delayUnit = " + delayUnit + ", " + "creationTimestamp = " + creationTimestamp + " }"; } @Override @DataClass.Generated.Member public void writeToParcel(Parcel dest, int flags) { // You can override field parcelling by defining methods like: // void parcelFieldName(Parcel dest, int flags) { ... } dest.writeLong(delayAmount); parcelDelayUnit(dest, flags); dest.writeLong(creationTimestamp); } @Override @DataClass.Generated.Member public int describeContents() { return 0; } @DataClass.Generated.Member public static final @NonNull Parcelable.Creator<SampleWithCustomBuilder> CREATOR = new Parcelable.Creator<SampleWithCustomBuilder>() { @Override public SampleWithCustomBuilder[] newArray(int size) { return new SampleWithCustomBuilder[size]; } @Override @SuppressWarnings({"unchecked", "RedundantCast"}) public SampleWithCustomBuilder createFromParcel(Parcel in) { // You can override field unparcelling by defining methods like: // static FieldType unparcelFieldName(Parcel in) { ... } long _delayAmount = in.readLong(); TimeUnit _delayUnit = unparcelDelayUnit(in); long _creationTimestamp = in.readLong(); return new SampleWithCustomBuilder( _delayAmount, _delayUnit, _creationTimestamp); } }; /** /** * A builder for {@link SampleWithCustomBuilder} * A builder for {@link SampleWithCustomBuilder} */ */ Loading Loading @@ -176,10 +239,10 @@ public class SampleWithCustomBuilder { } } @DataClass.Generated( @DataClass.Generated( time = 1569956014908L, time = 1570139501160L, codegenVersion = "1.0.3", codegenVersion = "1.0.4", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java", inputSignatures = " long delayAmount\n @android.annotation.NonNull java.util.concurrent.TimeUnit delayUnit\n long creationTimestamp\nclass SampleWithCustomBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true)\nabstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayAmount(long)\npublic abstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayUnit(java.util.concurrent.TimeUnit)\npublic com.android.codegentest.SampleWithCustomBuilder.Builder setDelay(long,java.util.concurrent.TimeUnit)\nclass BaseBuilder extends java.lang.Object implements []") inputSignatures = " long delayAmount\n @android.annotation.NonNull java.util.concurrent.TimeUnit delayUnit\n long creationTimestamp\nprivate static java.util.concurrent.TimeUnit unparcelDelayUnit(android.os.Parcel)\nprivate void parcelDelayUnit(android.os.Parcel,int)\nclass SampleWithCustomBuilder extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genBuilder=true, genAidl=false, genToString=true)\nabstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayAmount(long)\npublic abstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayUnit(java.util.concurrent.TimeUnit)\npublic com.android.codegentest.SampleWithCustomBuilder.Builder setDelay(long,java.util.concurrent.TimeUnit)\nclass BaseBuilder extends java.lang.Object implements []") @Deprecated @Deprecated private void __metadata() {} private void __metadata() {} Loading Loading
tests/Codegen/runTest.sh +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,7 @@ else header_and_eval m -j16 codegen_cli && \ header_and_eval m -j16 codegen_cli && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java && \ header_and_eval codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java && \ cd $ANDROID_BUILD_TOP && cd $ANDROID_BUILD_TOP && header_and_eval mmma -j16 frameworks/base/tests/Codegen && \ header_and_eval mmma -j16 frameworks/base/tests/Codegen && \ header_and_eval adb install -r -t $ANDROID_PRODUCT_OUT/testcases/CodegenTests/arm64/CodegenTests.apk && \ header_and_eval adb install -r -t $ANDROID_PRODUCT_OUT/testcases/CodegenTests/arm64/CodegenTests.apk && \ Loading
tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java 0 → 100644 +362 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.codegentest; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; import android.util.SparseIntArray; import com.android.internal.util.AnnotationValidations; import com.android.internal.util.DataClass; import java.util.List; import java.util.Map; /** * Additional test for various parcelling corner-cases. */ @DataClass( genBuilder = true, genAidl = false, genToString = true) public class ParcelAllTheThingsDataClass implements Parcelable { @NonNull String[] mStringArray = null; @NonNull int[] mIntArray = null; @NonNull List<String> mStringList = null; @NonNull Map<String, SampleWithCustomBuilder> mMap = null; @NonNull Map<String, String> mStringMap = null; @NonNull SparseArray<SampleWithCustomBuilder> mSparseArray = null; @NonNull SparseIntArray mSparseIntArray = null; // Code below generated by codegen v1.0.4. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // // To regenerate run: // $ codegen $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java @DataClass.Generated.Member /* package-private */ ParcelAllTheThingsDataClass( @NonNull String[] stringArray, @NonNull int[] intArray, @NonNull List<String> stringList, @NonNull Map<String,SampleWithCustomBuilder> map, @NonNull Map<String,String> stringMap, @NonNull SparseArray<SampleWithCustomBuilder> sparseArray, @NonNull SparseIntArray sparseIntArray) { this.mStringArray = stringArray; AnnotationValidations.validate( NonNull.class, null, mStringArray); this.mIntArray = intArray; AnnotationValidations.validate( NonNull.class, null, mIntArray); this.mStringList = stringList; AnnotationValidations.validate( NonNull.class, null, mStringList); this.mMap = map; AnnotationValidations.validate( NonNull.class, null, mMap); this.mStringMap = stringMap; AnnotationValidations.validate( NonNull.class, null, mStringMap); this.mSparseArray = sparseArray; AnnotationValidations.validate( NonNull.class, null, mSparseArray); this.mSparseIntArray = sparseIntArray; AnnotationValidations.validate( NonNull.class, null, mSparseIntArray); // onConstructed(); // You can define this method to get a callback } @DataClass.Generated.Member public @NonNull String[] getStringArray() { return mStringArray; } @DataClass.Generated.Member public @NonNull int[] getIntArray() { return mIntArray; } @DataClass.Generated.Member public @NonNull List<String> getStringList() { return mStringList; } @DataClass.Generated.Member public @NonNull Map<String,SampleWithCustomBuilder> getMap() { return mMap; } @DataClass.Generated.Member public @NonNull Map<String,String> getStringMap() { return mStringMap; } @DataClass.Generated.Member public @NonNull SparseArray<SampleWithCustomBuilder> getSparseArray() { return mSparseArray; } @DataClass.Generated.Member public @NonNull SparseIntArray getSparseIntArray() { return mSparseIntArray; } @Override @DataClass.Generated.Member public String toString() { // You can override field toString logic by defining methods like: // String fieldNameToString() { ... } return "ParcelAllTheThingsDataClass { " + "stringArray = " + java.util.Arrays.toString(mStringArray) + ", " + "intArray = " + java.util.Arrays.toString(mIntArray) + ", " + "stringList = " + mStringList + ", " + "map = " + mMap + ", " + "stringMap = " + mStringMap + ", " + "sparseArray = " + mSparseArray + ", " + "sparseIntArray = " + mSparseIntArray + " }"; } @Override @DataClass.Generated.Member public void writeToParcel(Parcel dest, int flags) { // You can override field parcelling by defining methods like: // void parcelFieldName(Parcel dest, int flags) { ... } dest.writeStringArray(mStringArray); dest.writeIntArray(mIntArray); dest.writeStringList(mStringList); dest.writeMap(mMap); dest.writeMap(mStringMap); dest.writeSparseArray(mSparseArray); dest.writeSparseIntArray(mSparseIntArray); } @Override @DataClass.Generated.Member public int describeContents() { return 0; } @DataClass.Generated.Member public static final @NonNull Parcelable.Creator<ParcelAllTheThingsDataClass> CREATOR = new Parcelable.Creator<ParcelAllTheThingsDataClass>() { @Override public ParcelAllTheThingsDataClass[] newArray(int size) { return new ParcelAllTheThingsDataClass[size]; } @Override @SuppressWarnings({"unchecked", "RedundantCast"}) public ParcelAllTheThingsDataClass createFromParcel(Parcel in) { // You can override field unparcelling by defining methods like: // static FieldType unparcelFieldName(Parcel in) { ... } String[] stringArray = in.createStringArray(); int[] intArray = in.createIntArray(); List<String> stringList = new java.util.ArrayList<>(); in.readStringList(stringList); Map<String,SampleWithCustomBuilder> map = new java.util.LinkedHashMap<>(); in.readMap(map, SampleWithCustomBuilder.class.getClassLoader()); Map<String,String> stringMap = new java.util.LinkedHashMap<>(); in.readMap(stringMap, String.class.getClassLoader()); SparseArray<SampleWithCustomBuilder> sparseArray = (SparseArray) in.readSparseArray(SampleWithCustomBuilder.class.getClassLoader()); SparseIntArray sparseIntArray = (SparseIntArray) in.readSparseIntArray(); return new ParcelAllTheThingsDataClass( stringArray, intArray, stringList, map, stringMap, sparseArray, sparseIntArray); } }; /** * A builder for {@link ParcelAllTheThingsDataClass} */ @SuppressWarnings("WeakerAccess") @DataClass.Generated.Member public static class Builder { private @NonNull String[] mStringArray; private @NonNull int[] mIntArray; private @NonNull List<String> mStringList; private @NonNull Map<String,SampleWithCustomBuilder> mMap; private @NonNull Map<String,String> mStringMap; private @NonNull SparseArray<SampleWithCustomBuilder> mSparseArray; private @NonNull SparseIntArray mSparseIntArray; private long mBuilderFieldsSet = 0L; public Builder() { } @DataClass.Generated.Member public @NonNull Builder setStringArray(@NonNull String... value) { checkNotUsed(); mBuilderFieldsSet |= 0x1; mStringArray = value; return this; } @DataClass.Generated.Member public @NonNull Builder setIntArray(@NonNull int... value) { checkNotUsed(); mBuilderFieldsSet |= 0x2; mIntArray = value; return this; } @DataClass.Generated.Member public @NonNull Builder setStringList(@NonNull List<String> value) { checkNotUsed(); mBuilderFieldsSet |= 0x4; mStringList = value; return this; } /** @see #setStringList */ @DataClass.Generated.Member public @NonNull Builder addStringList(String value) { // You can refine this method's name by providing item's singular name, e.g.: // @DataClass.PluralOf("item")) mItems = ... if (mStringList == null) setStringList(new java.util.ArrayList<>()); mStringList.add(value); return this; } @DataClass.Generated.Member public @NonNull Builder setMap(@NonNull Map<String,SampleWithCustomBuilder> value) { checkNotUsed(); mBuilderFieldsSet |= 0x8; mMap = value; return this; } /** @see #setMap */ @DataClass.Generated.Member public @NonNull Builder addMap(String key, SampleWithCustomBuilder value) { // You can refine this method's name by providing item's singular name, e.g.: // @DataClass.PluralOf("item")) mItems = ... if (mMap == null) setMap(new java.util.LinkedHashMap()); mMap.put(key, value); return this; } @DataClass.Generated.Member public @NonNull Builder setStringMap(@NonNull Map<String,String> value) { checkNotUsed(); mBuilderFieldsSet |= 0x10; mStringMap = value; return this; } /** @see #setStringMap */ @DataClass.Generated.Member public @NonNull Builder addStringMap(String key, String value) { // You can refine this method's name by providing item's singular name, e.g.: // @DataClass.PluralOf("item")) mItems = ... if (mStringMap == null) setStringMap(new java.util.LinkedHashMap()); mStringMap.put(key, value); return this; } @DataClass.Generated.Member public @NonNull Builder setSparseArray(@NonNull SparseArray<SampleWithCustomBuilder> value) { checkNotUsed(); mBuilderFieldsSet |= 0x20; mSparseArray = value; return this; } @DataClass.Generated.Member public @NonNull Builder setSparseIntArray(@NonNull SparseIntArray value) { checkNotUsed(); mBuilderFieldsSet |= 0x40; mSparseIntArray = value; return this; } /** Builds the instance. This builder should not be touched after calling this! */ public ParcelAllTheThingsDataClass build() { checkNotUsed(); mBuilderFieldsSet |= 0x80; // Mark builder used if ((mBuilderFieldsSet & 0x1) == 0) { mStringArray = null; } if ((mBuilderFieldsSet & 0x2) == 0) { mIntArray = null; } if ((mBuilderFieldsSet & 0x4) == 0) { mStringList = null; } if ((mBuilderFieldsSet & 0x8) == 0) { mMap = null; } if ((mBuilderFieldsSet & 0x10) == 0) { mStringMap = null; } if ((mBuilderFieldsSet & 0x20) == 0) { mSparseArray = null; } if ((mBuilderFieldsSet & 0x40) == 0) { mSparseIntArray = null; } ParcelAllTheThingsDataClass o = new ParcelAllTheThingsDataClass( mStringArray, mIntArray, mStringList, mMap, mStringMap, mSparseArray, mSparseIntArray); return o; } private void checkNotUsed() { if ((mBuilderFieldsSet & 0x80) != 0) { throw new IllegalStateException( "This Builder should not be reused. Use a new Builder instance instead"); } } } @DataClass.Generated( time = 1570139502128L, codegenVersion = "1.0.4", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/ParcelAllTheThingsDataClass.java", inputSignatures = " @android.annotation.NonNull java.lang.String[] mStringArray\n @android.annotation.NonNull int[] mIntArray\n @android.annotation.NonNull java.util.List<java.lang.String> mStringList\n @android.annotation.NonNull java.util.Map<java.lang.String,com.android.codegentest.SampleWithCustomBuilder> mMap\n @android.annotation.NonNull java.util.Map<java.lang.String,java.lang.String> mStringMap\n @android.annotation.NonNull android.util.SparseArray<com.android.codegentest.SampleWithCustomBuilder> mSparseArray\n @android.annotation.NonNull android.util.SparseIntArray mSparseIntArray\nclass ParcelAllTheThingsDataClass extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genBuilder=true, genAidl=false, genToString=true)") @Deprecated private void __metadata() {} }
tests/Codegen/src/com/android/codegentest/SampleDataClass.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -342,7 +342,7 @@ public final class SampleDataClass implements Parcelable { // Code below generated by codegen v1.0.3. // Code below generated by codegen v1.0.4. // // // DO NOT MODIFY! // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // CHECKSTYLE:OFF Generated code Loading Loading @@ -1798,8 +1798,8 @@ public final class SampleDataClass implements Parcelable { } } @DataClass.Generated( @DataClass.Generated( time = 1569956013899L, time = 1570139500112L, codegenVersion = "1.0.3", codegenVersion = "1.0.4", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java", 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)") 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 @Deprecated Loading
tests/Codegen/src/com/android/codegentest/SampleDataClassTest.java +34 −0 Original line number Original line Diff line number Diff line Loading @@ -25,9 +25,14 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import android.net.LinkAddress; import android.net.LinkAddress; import android.os.Bundle; import android.os.Parcel; import android.os.Parcel; import android.os.Parcelable; import android.os.Parcelable; import android.util.SparseArray; import android.util.SparseIntArray; import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4; Loading @@ -36,6 +41,9 @@ import org.junit.runner.RunWith; import java.util.Arrays; import java.util.Arrays; import java.util.Date; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger; /** /** Loading Loading @@ -209,6 +217,32 @@ public class SampleDataClassTest { newBuilder().setDayOfWeek(42).build(); newBuilder().setDayOfWeek(42).build(); } } @Test public void testDataStructures_parcelCorrectly() { SampleWithCustomBuilder otherParcelable = new SampleWithCustomBuilder.Builder().setDelay(3, SECONDS).build(); ParcelAllTheThingsDataClass instance = new ParcelAllTheThingsDataClass.Builder() .setIntArray(40, 41) .addMap("foo", otherParcelable) .setSparseArray(new SparseArray<SampleWithCustomBuilder>() {{ put(45, otherParcelable); }}) .setSparseIntArray(new SparseIntArray() {{ put(48, 49); }}) .addStringMap("foo2", "fooValue") .setStringArray("foo", "bar") .addStringList("foo") .build(); ParcelAllTheThingsDataClass unparceledInstance = parcelAndUnparcel(instance, ParcelAllTheThingsDataClass.CREATOR); // SparseArray and friends don't implement equals // so just compare string representations instead assertEquals(instance.toString(), unparceledInstance.toString()); } private static <T extends Parcelable> T parcelAndUnparcel( private static <T extends Parcelable> T parcelAndUnparcel( T original, Parcelable.Creator<T> creator) { T original, Parcelable.Creator<T> creator) { Parcel p = Parcel.obtain(); Parcel p = Parcel.obtain(); Loading
tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java +69 −6 Original line number Original line Diff line number Diff line Loading @@ -17,14 +17,16 @@ package com.android.codegentest; package com.android.codegentest; import android.annotation.NonNull; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; import android.os.SystemClock; import com.android.internal.util.DataClass; import com.android.internal.util.DataClass; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; @DataClass(genBuilder = true) @DataClass(genBuilder = true, genAidl = false, genToString = true) public class SampleWithCustomBuilder { public class SampleWithCustomBuilder implements Parcelable { long delayAmount = 0; long delayAmount = 0; @NonNull @NonNull Loading Loading @@ -73,8 +75,17 @@ public class SampleWithCustomBuilder { } } private static TimeUnit unparcelDelayUnit(Parcel p) { return TimeUnit.values()[p.readInt()]; } private void parcelDelayUnit(Parcel p, int flags) { p.writeInt(delayUnit.ordinal()); } // Code below generated by codegen v1.0.3. // Code below generated by codegen v1.0.4. // // // DO NOT MODIFY! // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // CHECKSTYLE:OFF Generated code Loading Loading @@ -112,6 +123,58 @@ public class SampleWithCustomBuilder { return creationTimestamp; return creationTimestamp; } } @Override @DataClass.Generated.Member public String toString() { // You can override field toString logic by defining methods like: // String fieldNameToString() { ... } return "SampleWithCustomBuilder { " + "delayAmount = " + delayAmount + ", " + "delayUnit = " + delayUnit + ", " + "creationTimestamp = " + creationTimestamp + " }"; } @Override @DataClass.Generated.Member public void writeToParcel(Parcel dest, int flags) { // You can override field parcelling by defining methods like: // void parcelFieldName(Parcel dest, int flags) { ... } dest.writeLong(delayAmount); parcelDelayUnit(dest, flags); dest.writeLong(creationTimestamp); } @Override @DataClass.Generated.Member public int describeContents() { return 0; } @DataClass.Generated.Member public static final @NonNull Parcelable.Creator<SampleWithCustomBuilder> CREATOR = new Parcelable.Creator<SampleWithCustomBuilder>() { @Override public SampleWithCustomBuilder[] newArray(int size) { return new SampleWithCustomBuilder[size]; } @Override @SuppressWarnings({"unchecked", "RedundantCast"}) public SampleWithCustomBuilder createFromParcel(Parcel in) { // You can override field unparcelling by defining methods like: // static FieldType unparcelFieldName(Parcel in) { ... } long _delayAmount = in.readLong(); TimeUnit _delayUnit = unparcelDelayUnit(in); long _creationTimestamp = in.readLong(); return new SampleWithCustomBuilder( _delayAmount, _delayUnit, _creationTimestamp); } }; /** /** * A builder for {@link SampleWithCustomBuilder} * A builder for {@link SampleWithCustomBuilder} */ */ Loading Loading @@ -176,10 +239,10 @@ public class SampleWithCustomBuilder { } } @DataClass.Generated( @DataClass.Generated( time = 1569956014908L, time = 1570139501160L, codegenVersion = "1.0.3", codegenVersion = "1.0.4", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java", sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java", inputSignatures = " long delayAmount\n @android.annotation.NonNull java.util.concurrent.TimeUnit delayUnit\n long creationTimestamp\nclass SampleWithCustomBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true)\nabstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayAmount(long)\npublic abstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayUnit(java.util.concurrent.TimeUnit)\npublic com.android.codegentest.SampleWithCustomBuilder.Builder setDelay(long,java.util.concurrent.TimeUnit)\nclass BaseBuilder extends java.lang.Object implements []") inputSignatures = " long delayAmount\n @android.annotation.NonNull java.util.concurrent.TimeUnit delayUnit\n long creationTimestamp\nprivate static java.util.concurrent.TimeUnit unparcelDelayUnit(android.os.Parcel)\nprivate void parcelDelayUnit(android.os.Parcel,int)\nclass SampleWithCustomBuilder extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genBuilder=true, genAidl=false, genToString=true)\nabstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayAmount(long)\npublic abstract com.android.codegentest.SampleWithCustomBuilder.Builder setDelayUnit(java.util.concurrent.TimeUnit)\npublic com.android.codegentest.SampleWithCustomBuilder.Builder setDelay(long,java.util.concurrent.TimeUnit)\nclass BaseBuilder extends java.lang.Object implements []") @Deprecated @Deprecated private void __metadata() {} private void __metadata() {} Loading