@@ -60,8 +60,7 @@ class FirebaseDecoder(internal val value: Any?, private val decodeDouble: (value
6060 override fun decodeNull () = decodeNull(value)
6161
6262 @ExperimentalSerializationApi
63- override fun decodeInline (inlineDescriptor : SerialDescriptor ): Decoder =
64- FirebaseDecoder (value, decodeDouble)
63+ override fun decodeInline (inlineDescriptor : SerialDescriptor ) = FirebaseDecoder (value, decodeDouble)
6564}
6665
6766class FirebaseClassDecoder (
@@ -79,13 +78,6 @@ class FirebaseClassDecoder(
7978 .firstOrNull { ! descriptor.isElementOptional(it) || containsKey(descriptor.getElementName(it)) }
8079 ?.also { index = it + 1 }
8180 ? : DECODE_DONE
82-
83- override fun <T : Any > decodeNullableSerializableElement (
84- descriptor : SerialDescriptor ,
85- index : Int ,
86- deserializer : DeserializationStrategy <T ?>,
87- previousValue : T ?
88- ) = decodeSerializableElement(descriptor, index, deserializer, previousValue)
8981}
9082
9183open class FirebaseCompositeDecoder constructor(
@@ -123,13 +115,15 @@ open class FirebaseCompositeDecoder constructor(
123115
124116 override fun decodeLongElement (descriptor : SerialDescriptor , index : Int ) = decodeLong(get(descriptor, index))
125117
126- @ExperimentalSerializationApi
127118 override fun <T : Any > decodeNullableSerializableElement (
128119 descriptor : SerialDescriptor ,
129120 index : Int ,
130121 deserializer : DeserializationStrategy <T ?>,
131122 previousValue : T ?
132- ) = decodeSerializableElement(descriptor, index, deserializer, previousValue)
123+ ): T ? {
124+ val isNullabilitySupported = deserializer.descriptor.isNullable
125+ return if (isNullabilitySupported || decodeNotNullMark(get(descriptor, index))) decodeSerializableElement(descriptor, index, deserializer, previousValue) else decodeNull(get(descriptor, index))
126+ }
133127
134128 override fun decodeShortElement (descriptor : SerialDescriptor , index : Int ) = decodeShort(get(descriptor, index))
135129
@@ -206,5 +200,4 @@ private fun decodeNotNullMark(value: Any?) = value != null
206200
207201private fun decodeNull (value : Any? ) = value as Nothing?
208202
209- private fun decodeUnit (value : Any? ) = value as Unit
210203
0 commit comments