Files
kotlin-fork/plugins/parcelize/parcelize-compiler/testData/diagnostics/customParcelers.kt
T
Brian Norman 9ec469e3c3 [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
2024-01-04 19:59:56 +00:00

79 lines
2.6 KiB
Kotlin
Vendored

// WITH_STDLIB
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()
}
object CharSequenceParceler : Parceler<CharSequence> {
override fun create(parcel: Parcel) = TODO()
override fun CharSequence.write(parcel: Parcel, flags: Int) = TODO()
}
class StringClassParceler : Parceler<String> {
override fun create(parcel: Parcel) = TODO()
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)
@Parcelize
@TypeParceler<String, StringClassParceler>
class ShouldBeClass(val a: @WriteWith<<!PARCELER_SHOULD_BE_OBJECT!>StringClassParceler<!>> String) : Parcelable
@Parcelize
class Test(
val a: @WriteWith<<!PARCELER_TYPE_INCOMPATIBLE!>StringParceler<!>> Int,
val b: @WriteWith<StringParceler> String,
val c: @WriteWith<<!PARCELER_TYPE_INCOMPATIBLE!>StringParceler<!>> CharSequence,
val d: @WriteWith<CharSequenceParceler> String,
val e: @WriteWith<CharSequenceParceler> CharSequence
) : Parcelable
@Parcelize
@TypeParceler<String, StringParceler>
class Test2(@<!REDUNDANT_TYPE_PARCELER!>TypeParceler<!><String, StringParceler> val a: String) : Parcelable
@Parcelize
@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