Merge "Fix bug in BaseParceledListSlice implementation." into sc-dev

This commit is contained in:
Stanislav Zholnin
2021-05-07 14:20:06 +00:00
committed by Android (Google) Code Review

View File

@@ -75,16 +75,7 @@ abstract class BaseParceledListSlice<T> 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<T> 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<T> 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 =