diff --git a/core/java/android/content/pm/BaseParceledListSlice.java b/core/java/android/content/pm/BaseParceledListSlice.java index 5c7a5488076b3..7bade740c9be1 100644 --- a/core/java/android/content/pm/BaseParceledListSlice.java +++ b/core/java/android/content/pm/BaseParceledListSlice.java @@ -75,16 +75,7 @@ abstract class BaseParceledListSlice implements Parcelable { if (p.readInt() == 0) { break; } - - final T parcelable = readCreator(creator, p, loader); - if (listElementClass == null) { - listElementClass = parcelable.getClass(); - } else { - verifySameType(listElementClass, parcelable.getClass()); - } - - mList.add(parcelable); - + listElementClass = readVerifyAndAddElement(creator, p, loader, listElementClass); if (DEBUG) Log.d(TAG, "Read inline #" + i + ": " + mList.get(mList.size()-1)); i++; } @@ -104,11 +95,8 @@ abstract class BaseParceledListSlice implements Parcelable { return; } while (i < N && reply.readInt() != 0) { - final T parcelable = readCreator(creator, reply, loader); - verifySameType(listElementClass, parcelable.getClass()); - - mList.add(parcelable); - + listElementClass = readVerifyAndAddElement(creator, reply, loader, + listElementClass); if (DEBUG) Log.d(TAG, "Read extra #" + i + ": " + mList.get(mList.size()-1)); i++; } @@ -117,6 +105,18 @@ abstract class BaseParceledListSlice implements Parcelable { } } + private Class readVerifyAndAddElement(Parcelable.Creator creator, Parcel p, + ClassLoader loader, Class listElementClass) { + final T parcelable = readCreator(creator, p, loader); + if (listElementClass == null) { + listElementClass = parcelable.getClass(); + } else { + verifySameType(listElementClass, parcelable.getClass()); + } + mList.add(parcelable); + return listElementClass; + } + private T readCreator(Parcelable.Creator creator, Parcel p, ClassLoader loader) { if (creator instanceof Parcelable.ClassLoaderCreator) { Parcelable.ClassLoaderCreator classLoaderCreator =