@@ -60,8 +60,7 @@ class FirebaseDecoder(internal val value: Any?, private val decodeDouble: (value
60
60
override fun decodeNull () = decodeNull(value)
61
61
62
62
@ExperimentalSerializationApi
63
- override fun decodeInline (inlineDescriptor : SerialDescriptor ): Decoder =
64
- FirebaseDecoder (value, decodeDouble)
63
+ override fun decodeInline (inlineDescriptor : SerialDescriptor ) = FirebaseDecoder (value, decodeDouble)
65
64
}
66
65
67
66
class FirebaseClassDecoder (
@@ -79,13 +78,6 @@ class FirebaseClassDecoder(
79
78
.firstOrNull { ! descriptor.isElementOptional(it) || containsKey(descriptor.getElementName(it)) }
80
79
?.also { index = it + 1 }
81
80
? : 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)
89
81
}
90
82
91
83
open class FirebaseCompositeDecoder constructor(
@@ -123,13 +115,15 @@ open class FirebaseCompositeDecoder constructor(
123
115
124
116
override fun decodeLongElement (descriptor : SerialDescriptor , index : Int ) = decodeLong(get(descriptor, index))
125
117
126
- @ExperimentalSerializationApi
127
118
override fun <T : Any > decodeNullableSerializableElement (
128
119
descriptor : SerialDescriptor ,
129
120
index : Int ,
130
121
deserializer : DeserializationStrategy <T ?>,
131
122
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
+ }
133
127
134
128
override fun decodeShortElement (descriptor : SerialDescriptor , index : Int ) = decodeShort(get(descriptor, index))
135
129
@@ -206,5 +200,4 @@ private fun decodeNotNullMark(value: Any?) = value != null
206
200
207
201
private fun decodeNull (value : Any? ) = value as Nothing?
208
202
209
- private fun decodeUnit (value : Any? ) = value as Unit
210
203
0 commit comments