[Parcel] Expand types from TypeParceler annotation to support aliases

Class properties are being expanded before checking for custom
parcelers, which makes custom parcelers of type alias unable to be
found. To maintain K1 behavior, the custom parceler type must also be
expanded, so even the aliased type is supported when used in its raw
form as a class property.

^KT-64707 Fixed
This commit is contained in:
Brian Norman
2024-01-04 09:43:21 -06:00
committed by Space Team
parent 55bff799a8
commit 9ec469e3c3
3 changed files with 67 additions and 1 deletions
@@ -4,6 +4,10 @@ package test
import kotlinx.parcelize.*
import android.os.*
class Data<T>
typealias StringData = Data<String>
typealias NullableStringData = Data<String>?
object StringParceler : Parceler<String> {
override fun create(parcel: Parcel) = TODO()
override fun String.write(parcel: Parcel, flags: Int) = TODO()
@@ -19,6 +23,16 @@ class StringClassParceler : Parceler<String> {
override fun String.write(parcel: Parcel, flags: Int) = TODO()
}
class StringDataParceler : Parceler<StringData> {
override fun create(parcel: Parcel) = TODO()
override fun StringData.write(parcel: Parcel, flags: Int) = TODO()
}
class NullableStringDataParceler : Parceler<NullableStringData> {
override fun create(parcel: Parcel) = TODO()
override fun NullableStringData.write(parcel: Parcel, flags: Int) = TODO()
}
@<!CLASS_SHOULD_BE_PARCELIZE!>TypeParceler<!><String, StringParceler>
class MissingParcelizeAnnotation(val a: @<!CLASS_SHOULD_BE_PARCELIZE!>WriteWith<!><StringParceler> String)
@@ -43,3 +57,22 @@ class Test2(@<!REDUNDANT_TYPE_PARCELER!>TypeParceler<!><String, StringParceler>
@TypeParceler<<!DUPLICATING_TYPE_PARCELERS!>String<!>, StringParceler>
@TypeParceler<<!DUPLICATING_TYPE_PARCELERS!>String<!>, CharSequenceParceler>
class Test3(val a: String) : Parcelable
@Parcelize
@TypeParceler<StringData, StringDataParceler>
class StringDataParcelerTest(
val a: StringData,
val b: <!PARCELABLE_TYPE_NOT_SUPPORTED!>StringData?<!>,
val c: Data<String>,
val d: <!PARCELABLE_TYPE_NOT_SUPPORTED!>Data<String>?<!>,
) : Parcelable
@Parcelize
@TypeParceler<NullableStringData, NullableStringDataParceler>
class NullableStringDataParcelerTest(
val a: NullableStringData,
val b: <!PARCELABLE_TYPE_NOT_SUPPORTED!>StringData<!>,
val c: StringData?,
val d: <!PARCELABLE_TYPE_NOT_SUPPORTED!>Data<String><!>,
val e: Data<String>?,
) : Parcelable
@@ -4,6 +4,10 @@ package test
import kotlinx.parcelize.*
import android.os.*
class Data<T>
typealias StringData = Data<String>
typealias NullableStringData = Data<String>?
object StringParceler : Parceler<String> {
override fun create(parcel: Parcel) = TODO()
override fun String.write(parcel: Parcel, flags: Int) = TODO()
@@ -19,6 +23,16 @@ class StringClassParceler : Parceler<String> {
override fun String.write(parcel: Parcel, flags: Int) = TODO()
}
class StringDataParceler : Parceler<StringData> {
override fun create(parcel: Parcel) = TODO()
override fun StringData.write(parcel: Parcel, flags: Int) = TODO()
}
class NullableStringDataParceler : Parceler<NullableStringData> {
override fun create(parcel: Parcel) = TODO()
override fun NullableStringData.write(parcel: Parcel, flags: Int) = TODO()
}
@<!CLASS_SHOULD_BE_PARCELIZE!>TypeParceler<!><String, StringParceler>
class MissingParcelizeAnnotation(val a: @<!CLASS_SHOULD_BE_PARCELIZE!>WriteWith<!><StringParceler> String)
@@ -43,3 +57,22 @@ class Test2(@<!REDUNDANT_TYPE_PARCELER!>TypeParceler<!><String, StringParceler>
@TypeParceler<<!DUPLICATING_TYPE_PARCELERS!>String<!>, StringParceler>
@TypeParceler<<!DUPLICATING_TYPE_PARCELERS!>String<!>, CharSequenceParceler>
class Test3(val a: String) : Parcelable
@Parcelize
@TypeParceler<StringData, StringDataParceler>
class StringDataParcelerTest(
val a: StringData,
val b: <!PARCELABLE_TYPE_NOT_SUPPORTED!>StringData?<!>,
val c: Data<String>,
val d: <!PARCELABLE_TYPE_NOT_SUPPORTED!>Data<String>?<!>,
) : Parcelable
@Parcelize
@TypeParceler<NullableStringData, NullableStringDataParceler>
class NullableStringDataParcelerTest(
val a: NullableStringData,
val b: <!PARCELABLE_TYPE_NOT_SUPPORTED!>StringData<!>,
val c: StringData?,
val d: <!PARCELABLE_TYPE_NOT_SUPPORTED!>Data<String><!>,
val e: Data<String>?,
) : Parcelable