Parcelize: Fix type signatures in parcelable creator objects
These objects are visible from annotation processors and should not refer to the type parameters of enclosing parcelable classes.
This commit is contained in:
committed by
Alexander Udalov
parent
0bbb36e765
commit
a743669bc9
+5
-3
@@ -191,7 +191,9 @@ class ParcelizeIrTransformer(private val context: IrPluginContext, private val a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val creatorType = androidSymbols.androidOsParcelableCreator.typeWith(declaration.defaultType)
|
// Since the `CREATOR` object cannot refer to the type parameters of the parcelable class we use a star projected type
|
||||||
|
val declarationType = declaration.symbol.starProjectedType
|
||||||
|
val creatorType = androidSymbols.androidOsParcelableCreator.typeWith(declarationType)
|
||||||
|
|
||||||
if (!declaration.descriptor.hasCreatorField()) {
|
if (!declaration.descriptor.hasCreatorField()) {
|
||||||
declaration.addField {
|
declaration.addField {
|
||||||
@@ -217,7 +219,7 @@ class ParcelizeIrTransformer(private val context: IrPluginContext, private val a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val arrayType = context.irBuiltIns.arrayClass.typeWith(declaration.defaultType.makeNullable())
|
val arrayType = context.irBuiltIns.arrayClass.typeWith(declarationType.makeNullable())
|
||||||
addFunction("newArray", arrayType).apply {
|
addFunction("newArray", arrayType).apply {
|
||||||
overriddenSymbols = listOf(androidSymbols.androidOsParcelableCreator.getSimpleFunction(name.asString())!!)
|
overriddenSymbols = listOf(androidSymbols.androidOsParcelableCreator.getSimpleFunction(name.asString())!!)
|
||||||
val sizeParameter = addValueParameter("size", context.irBuiltIns.intType)
|
val sizeParameter = addValueParameter("size", context.irBuiltIns.intType)
|
||||||
@@ -232,7 +234,7 @@ class ParcelizeIrTransformer(private val context: IrPluginContext, private val a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addFunction("createFromParcel", declaration.defaultType).apply {
|
addFunction("createFromParcel", declarationType).apply {
|
||||||
overriddenSymbols = listOf(androidSymbols.androidOsParcelableCreator.getSimpleFunction(name.asString())!!)
|
overriddenSymbols = listOf(androidSymbols.androidOsParcelableCreator.getSimpleFunction(name.asString())!!)
|
||||||
val parcelParameter = addValueParameter("parcel", androidSymbols.androidOsParcel.defaultType)
|
val parcelParameter = addValueParameter("parcel", androidSymbols.androidOsParcel.defaultType)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
|
Ljava/lang/Object;Landroid/os/Parcelable$Creator<LBox<*>;>;
|
||||||
public final class Box$Creator : java/lang/Object, android/os/Parcelable$Creator {
|
public final class Box$Creator : java/lang/Object, android/os/Parcelable$Creator {
|
||||||
public void <init>()
|
public void <init>()
|
||||||
|
|
||||||
public final Box createFromParcel(android.os.Parcel parcel) {
|
(Landroid/os/Parcel;)LBox<*>;
|
||||||
|
public final Box createFromParcel(android.os.Parcel parcel)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (parcel)
|
LDC (parcel)
|
||||||
@@ -26,37 +30,58 @@ public final class Box$Creator : java/lang/Object, android/os/Parcelable$Creator
|
|||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(I)[LBox<*>;
|
||||||
public final Box[] newArray(int size)
|
public final Box[] newArray(int size)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
public java.lang.Object[] newArray(int size)
|
public java.lang.Object[] newArray(int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<T::Landroid/os/Parcelable;>Ljava/lang/Object;Landroid/os/Parcelable;
|
||||||
public final class Box : java/lang/Object, android/os/Parcelable {
|
public final class Box : java/lang/Object, android/os/Parcelable {
|
||||||
public final static android.os.Parcelable$Creator CREATOR
|
@Lkotlinx/parcelize/Parcelize;([]) // invisible
|
||||||
|
|
||||||
|
Landroid/os/Parcelable$Creator<LBox<*>;>;
|
||||||
|
public final static android.os.Parcelable$Creator CREATOR
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
|
TT;
|
||||||
private final android.os.Parcelable box
|
private final android.os.Parcelable box
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
static void <clinit>()
|
static void <clinit>()
|
||||||
|
|
||||||
|
(TT;)V
|
||||||
public void <init>(android.os.Parcelable box)
|
public void <init>(android.os.Parcelable box)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||||
|
|
||||||
|
()TT;
|
||||||
public final android.os.Parcelable component1()
|
public final android.os.Parcelable component1()
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
|
(TT;)LBox<TT;>;
|
||||||
public final Box copy(android.os.Parcelable box)
|
public final Box copy(android.os.Parcelable box)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||||
|
|
||||||
public static Box copy$default(Box p0, android.os.Parcelable p1, int p2, java.lang.Object p3)
|
public static Box copy$default(Box p0, android.os.Parcelable p1, int p2, java.lang.Object p3)
|
||||||
|
|
||||||
public int describeContents()
|
public int describeContents()
|
||||||
|
|
||||||
public boolean equals(java.lang.Object other)
|
public boolean equals(java.lang.Object other)
|
||||||
|
@Lorg/jetbrains/annotations/Nullable;([]) // invisible, parameter 0
|
||||||
|
|
||||||
|
()TT;
|
||||||
public final android.os.Parcelable getBox()
|
public final android.os.Parcelable getBox()
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
|
|
||||||
public java.lang.String toString()
|
public java.lang.String toString()
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
public void writeToParcel(android.os.Parcel out, int flags) {
|
public void writeToParcel(android.os.Parcel out, int flags)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (out)
|
LDC (out)
|
||||||
@@ -69,4 +94,4 @@ public final class Box : java/lang/Object, android/os/Parcelable {
|
|||||||
RETURN
|
RETURN
|
||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
// CURIOUS_ABOUT writeToParcel, createFromParcel
|
// CURIOUS_ABOUT writeToParcel, createFromParcel
|
||||||
|
// RENDER_ANNOTATIONS
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
import kotlinx.parcelize.*
|
import kotlinx.parcelize.*
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
|
Ljava/lang/Object;Landroid/os/Parcelable$Creator<LBox;>;
|
||||||
public final class Box$Creator : java/lang/Object, android/os/Parcelable$Creator {
|
public final class Box$Creator : java/lang/Object, android/os/Parcelable$Creator {
|
||||||
public void <init>()
|
public void <init>()
|
||||||
|
|
||||||
public final Box createFromParcel(android.os.Parcel in) {
|
(Landroid/os/Parcel;)LBox<*>;
|
||||||
|
public final Box createFromParcel(android.os.Parcel in)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (in)
|
LDC (in)
|
||||||
@@ -19,44 +23,64 @@ public final class Box$Creator : java/lang/Object, android/os/Parcelable$Creator
|
|||||||
|
|
||||||
public java.lang.Object createFromParcel(android.os.Parcel p0) {
|
public java.lang.Object createFromParcel(android.os.Parcel p0) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
LINENUMBER (8)
|
LINENUMBER (9)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
INVOKEVIRTUAL (Box$Creator, createFromParcel, (Landroid/os/Parcel;)LBox;)
|
INVOKEVIRTUAL (Box$Creator, createFromParcel, (Landroid/os/Parcel;)LBox;)
|
||||||
ARETURN
|
ARETURN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(I)[LBox<*>;
|
||||||
public final Box[] newArray(int size)
|
public final Box[] newArray(int size)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
public java.lang.Object[] newArray(int p0)
|
public java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<T::Landroid/os/Parcelable;>Ljava/lang/Object;Landroid/os/Parcelable;
|
||||||
public final class Box : java/lang/Object, android/os/Parcelable {
|
public final class Box : java/lang/Object, android/os/Parcelable {
|
||||||
|
@Lkotlinx/parcelize/Parcelize;([]) // invisible
|
||||||
|
|
||||||
|
Landroid/os/Parcelable$Creator<LBox;>;
|
||||||
public final static android.os.Parcelable$Creator CREATOR
|
public final static android.os.Parcelable$Creator CREATOR
|
||||||
|
|
||||||
|
TT;
|
||||||
private final android.os.Parcelable box
|
private final android.os.Parcelable box
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
static void <clinit>()
|
static void <clinit>()
|
||||||
|
|
||||||
|
(TT;)V
|
||||||
public void <init>(android.os.Parcelable box)
|
public void <init>(android.os.Parcelable box)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||||
|
|
||||||
|
()TT;
|
||||||
public final android.os.Parcelable component1()
|
public final android.os.Parcelable component1()
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
|
(TT;)LBox<TT;>;
|
||||||
public final Box copy(android.os.Parcelable box)
|
public final Box copy(android.os.Parcelable box)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0
|
||||||
|
|
||||||
public static Box copy$default(Box p0, android.os.Parcelable p1, int p2, java.lang.Object p3)
|
public static Box copy$default(Box p0, android.os.Parcelable p1, int p2, java.lang.Object p3)
|
||||||
|
|
||||||
public int describeContents()
|
public int describeContents()
|
||||||
|
|
||||||
public boolean equals(java.lang.Object p0)
|
public boolean equals(java.lang.Object p0)
|
||||||
|
@Lorg/jetbrains/annotations/Nullable;([]) // invisible, parameter 0
|
||||||
|
|
||||||
|
()TT;
|
||||||
public final android.os.Parcelable getBox()
|
public final android.os.Parcelable getBox()
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
|
|
||||||
public java.lang.String toString()
|
public java.lang.String toString()
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible
|
||||||
|
|
||||||
public void writeToParcel(android.os.Parcel parcel, int flags) {
|
public void writeToParcel(android.os.Parcel parcel, int flags)
|
||||||
|
@Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (parcel)
|
LDC (parcel)
|
||||||
@@ -69,4 +93,4 @@ public final class Box : java/lang/Object, android/os/Parcelable {
|
|||||||
RETURN
|
RETURN
|
||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user