[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:
+1
-1
@@ -80,7 +80,7 @@ object FirParcelizePropertyChecker : FirPropertyChecker() {
|
||||
private fun getCustomParcelerTypes(annotations: List<FirAnnotation>, session: FirSession): Set<ConeKotlinType> =
|
||||
annotations.mapNotNullTo(mutableSetOf()) { annotation ->
|
||||
if (annotation.fqName(session) in ParcelizeNames.TYPE_PARCELER_FQ_NAMES && annotation.typeArguments.size == 2) {
|
||||
annotation.typeArguments[0].toConeTypeProjection().type
|
||||
annotation.typeArguments[0].toConeTypeProjection().type?.fullyExpandedType(session)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
+33
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user