// WITH_STDLIB package test import kotlinx.android.parcel.* import android.os.Parcel import android.os.Parcelable object Parceler1 : Parceler { override fun create(parcel: Parcel) = parcel.readInt().toString() override fun String.write(parcel: Parcel, flags: Int) { parcel.writeInt(length) } } object Parceler2 : Parceler> { override fun create(parcel: Parcel) = listOf(parcel.readString()!!) override fun List.write(parcel: Parcel, flags: Int) { parcel.writeString(this.joinToString(",")) } } @Parcelize @TypeParcelerParceler2> data class Test( val a: String, val b: @WriteWith String, val c: @WriteWith List<@WriteWith String> ) : Parcelable { @IgnoredOnParcel val x by lazy { "foo" } } interface ParcelerForUser: Parceler @Parcelize class User(val name: String) : Parcelable { private companion object : ParcelerForUser { override fun User.write(parcel: Parcel, flags: Int) { parcel.writeString(name) } override fun create(parcel: Parcel) = User(parcel.readString()!!) } }