Parcelize: Handle nullable sparse arrays

Fixes https://issuetracker.google.com/269956252
This commit is contained in:
Steven Schäfer
2023-02-24 13:38:28 +01:00
committed by Alexander Udalov
parent 1f0e6321b0
commit 669ac1ae30
5 changed files with 175 additions and 13 deletions
@@ -154,26 +154,42 @@ class IrParcelSerializerFactory(private val symbols: AndroidSymbols) {
// This will only be hit if we have a custom serializer for booleans
"android.util.SparseBooleanArray" ->
return IrSparseArrayParcelSerializer(
classifier,
irBuiltIns.booleanType,
get(irBuiltIns.booleanType, scope, parcelizeType, strict())
return wrapNullableSerializerIfNeeded(
irType,
IrSparseArrayParcelSerializer(
classifier,
irBuiltIns.booleanType,
get(irBuiltIns.booleanType, scope, parcelizeType, strict())
)
)
"android.util.SparseIntArray" ->
return IrSparseArrayParcelSerializer(
classifier,
irBuiltIns.intType,
get(irBuiltIns.intType, scope, parcelizeType, strict())
return wrapNullableSerializerIfNeeded(
irType,
IrSparseArrayParcelSerializer(
classifier,
irBuiltIns.intType,
get(irBuiltIns.intType, scope, parcelizeType, strict())
)
)
"android.util.SparseLongArray" ->
return IrSparseArrayParcelSerializer(
classifier,
irBuiltIns.longType,
get(irBuiltIns.longType, scope, parcelizeType, strict())
return wrapNullableSerializerIfNeeded(
irType,
IrSparseArrayParcelSerializer(
classifier,
irBuiltIns.longType,
get(irBuiltIns.longType, scope, parcelizeType, strict())
)
)
"android.util.SparseArray" -> {
val elementType = (irType as IrSimpleType).arguments.single().upperBound(irBuiltIns)
return IrSparseArrayParcelSerializer(classifier, elementType, get(elementType, scope, parcelizeType, strict()))
return wrapNullableSerializerIfNeeded(
irType,
IrSparseArrayParcelSerializer(
classifier,
elementType,
get(elementType, scope, parcelizeType, strict())
)
)
}
// TODO: More java collections?