@@ -197,21 +197,8 @@ internal class CborEncoder(private val output: ByteArrayOutput) {
197
197
}
198
198
}
199
199
200
- private class CborMapReader (val cbor : Cbor , decoder : CborDecoder ) : CborListReader(cbor, decoder) {
201
- /* *
202
- * Keys that have been seen so far while reading this map.
203
- *
204
- * Only used if [Cbor.forbidDuplicateKeys] is in effect.
205
- */
206
- private val seenKeys = mutableSetOf<Any ?>()
207
-
200
+ private class CborMapReader (cbor : Cbor , decoder : CborDecoder ) : CborListReader(cbor, decoder) {
208
201
override fun skipBeginToken () = setSize(decoder.startMap() * 2 )
209
-
210
- override fun visitKey (key : Any? ) {
211
- if (cbor.forbidDuplicateKeys) {
212
- seenKeys.add(key) || throw DuplicateKeyException (key)
213
- }
214
- }
215
202
}
216
203
217
204
private open class CborListReader (cbor : Cbor , decoder : CborDecoder ) : CborReader(cbor, decoder) {
@@ -232,6 +219,13 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb
232
219
233
220
private var decodeByteArrayAsByteString = false
234
221
222
+ /* *
223
+ * Keys that have been seen so far while reading this map.
224
+ *
225
+ * Only used if [Cbor.forbidDuplicateKeys] is in effect.
226
+ */
227
+ private val seenKeys = mutableSetOf<Any ?>()
228
+
235
229
protected fun setSize (size : Int ) {
236
230
if (size >= 0 ) {
237
231
finiteMode = true
@@ -259,12 +253,19 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb
259
253
if (! finiteMode) decoder.end()
260
254
}
261
255
256
+ override fun visitKey (key : Any? ) {
257
+ if (cbor.forbidDuplicateKeys) {
258
+ seenKeys.add(key) || throw DuplicateKeyException (key)
259
+ }
260
+ }
261
+
262
262
override fun decodeElementIndex (descriptor : SerialDescriptor ): Int {
263
263
val index = if (cbor.ignoreUnknownKeys) {
264
264
val knownIndex: Int
265
265
while (true ) {
266
266
if (isDone()) return CompositeDecoder .DECODE_DONE
267
267
val elemName = decoder.nextString()
268
+ visitKey(elemName)
268
269
readProperties++
269
270
270
271
val index = descriptor.getElementIndex(elemName)
@@ -279,6 +280,7 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb
279
280
} else {
280
281
if (isDone()) return CompositeDecoder .DECODE_DONE
281
282
val elemName = decoder.nextString()
283
+ visitKey(elemName)
282
284
readProperties++
283
285
descriptor.getElementIndexOrThrow(elemName)
284
286
}
0 commit comments