Parcelable: Support Parcelizer interface in order to be able to customize serialization

This commit is contained in:
Yan Zhulanow
2017-06-29 22:57:07 +03:00
parent aa5f9ee3ec
commit 3062e72282
11 changed files with 386 additions and 23 deletions
@@ -0,0 +1,18 @@
// CURIOUS_ABOUT writeToParcel, createFromParcel, newArray
import kotlinx.android.parcel.*
import android.os.Parcel
import android.os.Parcelable
@MagicParcel
class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
private companion object : Parceler<User> {
override fun User.write(parcel: Parcel, flags: Int) {
parcel.writeString(firstName)
parcel.writeString(lastName)
parcel.writeInt(age)
}
override fun create(parcel: Parcel) = User(parcel.readString(), parcel.readString(), parcel.readInt())
}
}
@@ -0,0 +1,96 @@
public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final User createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkParameterIsNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
GETSTATIC (Companion, LUser$Companion;)
ALOAD (1)
INVOKEVIRTUAL (User$Companion, create, (Landroid/os/Parcel;)LUser;)
ARETURN
LABEL (L1)
}
public final User[] newArray(int p0) {
LABEL (L0)
ILOAD (1)
ANEWARRAY
ARETURN
LABEL (L1)
}
}
final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
private void <init>()
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker p0)
public User create(android.os.Parcel p0)
public android.os.Parcelable create(android.os.Parcel p0)
public User[] newArray(int p0) {
LABEL (L0)
LINENUMBER (9)
ALOAD (0)
ILOAD (1)
INVOKESTATIC (kotlinx/android/parcel/Parceler$DefaultImpls, newArray, (Lkotlinx/android/parcel/Parceler;I)[Landroid/os/Parcelable;)
CHECKCAST
ARETURN
LABEL (L1)
}
public android.os.Parcelable[] newArray(int p0) {
LABEL (L0)
LINENUMBER (9)
ALOAD (0)
ILOAD (1)
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
CHECKCAST
ARETURN
}
public void write(User p0, android.os.Parcel p1, int p2)
public void write(android.os.Parcelable p0, android.os.Parcel p1, int p2)
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Companion Companion
private final int age
private final java.lang.String firstName
private final java.lang.String lastName
static void <clinit>()
public void <init>(java.lang.String p0, java.lang.String p1, int p2)
public final int describeContents()
public final int getAge()
public final java.lang.String getFirstName()
public final java.lang.String getLastName()
public final void writeToParcel(android.os.Parcel p0, int p1) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkParameterIsNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
GETSTATIC (Companion, LUser$Companion;)
ALOAD (0)
ALOAD (1)
ILOAD (2)
INVOKEVIRTUAL (User$Companion, write, (LUser;Landroid/os/Parcel;I)V)
RETURN
LABEL (L1)
}
}
@@ -0,0 +1,20 @@
// CURIOUS_ABOUT newArray
import kotlinx.android.parcel.*
import android.os.Parcel
import android.os.Parcelable
@MagicParcel
class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
private companion object : Parceler<User> {
override fun User.write(parcel: Parcel, flags: Int) {
parcel.writeString(firstName)
parcel.writeString(lastName)
parcel.writeInt(age)
}
override fun create(parcel: Parcel) = User(parcel.readString(), parcel.readString(), parcel.readInt())
override fun newArray(size: Int) = arrayOfNulls<User>(size) as Array<User>
}
}
@@ -0,0 +1,73 @@
public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final User createFromParcel(android.os.Parcel p0)
public final User[] newArray(int p0) {
LABEL (L0)
GETSTATIC (Companion, LUser$Companion;)
ILOAD (1)
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
ARETURN
LABEL (L1)
}
}
final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
private void <init>()
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker p0)
public User create(android.os.Parcel p0)
public android.os.Parcelable create(android.os.Parcel p0)
public User[] newArray(int p0) {
LABEL (L0)
LINENUMBER (18)
ILOAD (1)
ANEWARRAY
ARETURN
LABEL (L1)
}
public android.os.Parcelable[] newArray(int p0) {
LABEL (L0)
LINENUMBER (9)
ALOAD (0)
ILOAD (1)
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
CHECKCAST
ARETURN
}
public void write(User p0, android.os.Parcel p1, int p2)
public void write(android.os.Parcelable p0, android.os.Parcel p1, int p2)
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Companion Companion
private final int age
private final java.lang.String firstName
private final java.lang.String lastName
static void <clinit>()
public void <init>(java.lang.String p0, java.lang.String p1, int p2)
public final int describeContents()
public final int getAge()
public final java.lang.String getFirstName()
public final java.lang.String getLastName()
public final void writeToParcel(android.os.Parcel p0, int p1)
}