Parcelable: Support CharSequence, IBinder/IInterface, objects, enums. Serialize Parcelable efficiently if possible

This commit is contained in:
Yan Zhulanow
2017-06-30 22:39:30 +03:00
parent 19eb30b3ae
commit 4200629347
23 changed files with 442 additions and 94 deletions
@@ -0,0 +1,9 @@
// CURIOUS_ABOUT writeToParcel, createFromParcel
import kotlinx.android.parcel.*
import android.os.Parcelable
import android.os.IBinder
import android.os.IInterface
@MagicParcel
class User(val binder: IBinder, val intf: IInterface?) : Parcelable
@@ -0,0 +1,56 @@
public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkParameterIsNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
NEW
DUP
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, readStrongBinder, ()Landroid/os/IBinder;)
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, readStrongInterface, ()Landroid/os/IInterface;)
INVOKESPECIAL (User, <init>, (Landroid/os/IBinder;Landroid/os/IInterface;)V)
ARETURN
LABEL (L1)
}
public final User[] newArray(int p0)
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$Creator CREATOR
private final android.os.IBinder binder
private final android.os.IInterface intf
static void <clinit>()
public void <init>(android.os.IBinder p0, android.os.IInterface p1)
public final int describeContents()
public final android.os.IBinder getBinder()
public final android.os.IInterface getIntf()
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)
ALOAD (1)
ALOAD (0)
GETFIELD (binder, Landroid/os/IBinder;)
INVOKEVIRTUAL (android/os/Parcel, writeStrongBinder, (Landroid/os/IBinder;)V)
ALOAD (1)
ALOAD (0)
GETFIELD (intf, Landroid/os/IInterface;)
INVOKEVIRTUAL (android/os/Parcel, writeStrongInterface, (Landroid/os/IInterface;)V)
RETURN
LABEL (L1)
}
}
@@ -1,13 +1,13 @@
public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
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 java.lang.Object createFromParcel(android.os.Parcel p0)
public final User[] newArray(int p0)
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Creator CREATOR
private final int age
@@ -1,27 +1,3 @@
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>()
@@ -57,8 +33,32 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
public void write(android.os.Parcelable p0, android.os.Parcel p1, int p2)
}
public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object 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;)Landroid/os/Parcelable;)
ARETURN
LABEL (L1)
}
public final User[] newArray(int p0) {
LABEL (L0)
ILOAD (1)
ANEWARRAY
ARETURN
LABEL (L1)
}
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Creator CREATOR
public final static User$Companion Companion
@@ -1,18 +1,3 @@
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>()
@@ -46,8 +31,23 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
public void write(android.os.Parcelable p0, android.os.Parcel p1, int p2)
}
public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object 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)
}
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Creator CREATOR
public final static User$Companion Companion
@@ -1,11 +1,3 @@
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)
}
public final class User$Companion : java/lang/Object {
private void <init>()
@@ -18,8 +10,16 @@ public final class User$Companion : java/lang/Object {
private static void test$annotations()
}
public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final User[] newArray(int p0)
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Creator CREATOR
public final static User$Companion Companion
@@ -41,8 +41,8 @@ public final class User : java/lang/Object, android/os/Parcelable {
PUTSTATIC (test, Ljava/lang/StringBuilder;)
NEW
DUP
INVOKESPECIAL (User$CREATOR, <init>, ()V)
PUTSTATIC (CREATOR, LUser$CREATOR;)
INVOKESPECIAL (User$Creator, <init>, ()V)
PUTSTATIC (CREATOR, LUser$Creator;)
RETURN
}
@@ -1,13 +1,13 @@
public static class Test$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public static class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final Test createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final Test[] newArray(int p0)
}
public final class Test : java/lang/Object {
public final static Test$CREATOR CREATOR
public final static Test$Creator CREATOR
private final java.util.List names
@@ -1,13 +1,13 @@
public static class TestNotNull$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public static class TestNotNull$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final TestNotNull createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final TestNotNull[] newArray(int p0)
}
public final class TestNotNull : java/lang/Object {
public final static TestNotNull$CREATOR CREATOR
public final static TestNotNull$Creator CREATOR
private final android.util.Size a
@@ -33,16 +33,16 @@ public final class TestNotNull : java/lang/Object {
}
}
public static class TestNullable$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public static class TestNullable$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final TestNullable createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final TestNullable[] newArray(int p0)
}
public final class TestNullable : java/lang/Object {
public final static TestNullable$CREATOR CREATOR
public final static TestNullable$Creator CREATOR
private final android.util.Size a
@@ -10,10 +10,10 @@ public final class SerializableSimple : java/lang/Object, java/io/Serializable {
public final java.lang.String getB()
}
public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
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 java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -33,7 +33,7 @@ public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creat
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Creator CREATOR
private final SerializableSimple notNull
@@ -42,8 +42,8 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>() {
NEW
DUP
INVOKESPECIAL (User$CREATOR, <init>, ()V)
PUTSTATIC (CREATOR, LUser$CREATOR;)
INVOKESPECIAL (User$Creator, <init>, ()V)
PUTSTATIC (CREATOR, LUser$Creator;)
RETURN
}
@@ -1,7 +1,7 @@
public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
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 java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -25,7 +25,7 @@ public static class User$CREATOR : java/lang/Object, android/os/Parcelable$Creat
}
public final class User : java/lang/Object, android/os/Parcelable {
public final static User$CREATOR CREATOR
public final static User$Creator CREATOR
private final int age
@@ -38,8 +38,8 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>() {
NEW
DUP
INVOKESPECIAL (User$CREATOR, <init>, ()V)
PUTSTATIC (CREATOR, LUser$CREATOR;)
INVOKESPECIAL (User$Creator, <init>, ()V)
PUTSTATIC (CREATOR, LUser$Creator;)
RETURN
}
@@ -1,13 +1,13 @@
public static class Test$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public static class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final Test createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final Test[] newArray(int p0)
}
public final class Test : java/lang/Object {
public final static Test$CREATOR CREATOR
public final static Test$Creator CREATOR
private final java.util.List names
@@ -1,7 +1,7 @@
public static class Test$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public static class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final Test createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -29,7 +29,7 @@ public static class Test$CREATOR : java/lang/Object, android/os/Parcelable$Creat
}
public final class Test : java/lang/Object, android/os/Parcelable {
public final static Test$CREATOR CREATOR
public final static Test$Creator CREATOR
private final android.util.Size nullable
@@ -88,10 +88,10 @@ public final class Test : java/lang/Object, android/os/Parcelable {
}
}
public static class TestF$CREATOR : java/lang/Object, android/os/Parcelable$Creator {
public static class TestF$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final TestF createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -119,7 +119,7 @@ public static class TestF$CREATOR : java/lang/Object, android/os/Parcelable$Crea
}
public final class TestF : java/lang/Object, android/os/Parcelable {
public final static TestF$CREATOR CREATOR
public final static TestF$Creator CREATOR
private final android.util.SizeF nullable