@@ -54,7 +54,7 @@ public sealed class AbstractCollectionSerializer<Element, Collection, Builder> :
54
54
}
55
55
56
56
@PublishedApi
57
- internal sealed class ListLikeSerializer <Element , Collection , Builder >(
57
+ internal sealed class CollectionLikeSerializer <Element , Collection , Builder >(
58
58
private val elementSerializer : KSerializer <Element >
59
59
) : AbstractCollectionSerializer<Element, Collection, Builder>() {
60
60
@@ -70,13 +70,13 @@ internal sealed class ListLikeSerializer<Element, Collection, Builder>(
70
70
}
71
71
}
72
72
73
- protected final override fun readAll (decoder : CompositeDecoder , builder : Builder , startIndex : Int , size : Int ) {
73
+ final override fun readAll (decoder : CompositeDecoder , builder : Builder , startIndex : Int , size : Int ) {
74
74
require(size >= 0 ) { " Size must be known in advance when using READ_ALL" }
75
75
for (index in 0 until size)
76
76
readElement(decoder, startIndex + index, builder, checkIndex = false )
77
77
}
78
78
79
- protected override fun readElement (decoder : CompositeDecoder , index : Int , builder : Builder , checkIndex : Boolean ) {
79
+ override fun readElement (decoder : CompositeDecoder , index : Int , builder : Builder , checkIndex : Boolean ) {
80
80
builder.insert(index, decoder.decodeSerializableElement(descriptor, index, elementSerializer))
81
81
}
82
82
}
@@ -143,7 +143,7 @@ internal abstract class PrimitiveArrayBuilder<Array> internal constructor() {
143
143
internal abstract class PrimitiveArraySerializer <Element , Array , Builder
144
144
: PrimitiveArrayBuilder <Array >> internal constructor(
145
145
primitiveSerializer : KSerializer <Element >
146
- ) : ListLikeSerializer <Element, Array, Builder>(primitiveSerializer) {
146
+ ) : CollectionLikeSerializer <Element, Array, Builder>(primitiveSerializer) {
147
147
final override val descriptor: SerialDescriptor = PrimitiveArrayDescriptor (primitiveSerializer.descriptor)
148
148
149
149
final override fun Builder.builderSize (): Int = position
@@ -160,7 +160,7 @@ internal abstract class PrimitiveArraySerializer<Element, Array, Builder
160
160
161
161
protected abstract fun empty (): Array
162
162
163
- protected abstract override fun readElement (
163
+ abstract override fun readElement (
164
164
decoder : CompositeDecoder ,
165
165
index : Int ,
166
166
builder : Builder ,
@@ -184,7 +184,7 @@ internal abstract class PrimitiveArraySerializer<Element, Array, Builder
184
184
internal class ReferenceArraySerializer <ElementKlass : Any , Element : ElementKlass ?>(
185
185
private val kClass : KClass <ElementKlass >,
186
186
eSerializer : KSerializer <Element >
187
- ) : ListLikeSerializer <Element, Array<Element>, ArrayList<Element>>(eSerializer) {
187
+ ) : CollectionLikeSerializer <Element, Array<Element>, ArrayList<Element>>(eSerializer) {
188
188
override val descriptor: SerialDescriptor = ArrayClassDesc (eSerializer.descriptor)
189
189
190
190
override fun Array<Element>.collectionSize (): Int = size
@@ -202,12 +202,17 @@ internal class ReferenceArraySerializer<ElementKlass : Any, Element : ElementKla
202
202
}
203
203
}
204
204
205
+ @PublishedApi
206
+ internal abstract class CollectionSerializer <E , C : Collection <E >, B >(element : KSerializer <E >) : CollectionLikeSerializer<E, C, B>(element) {
207
+ override fun C.collectionSize (): Int = size
208
+ override fun C.collectionIterator (): Iterator <E > = iterator()
209
+ }
210
+
205
211
@InternalSerializationApi
206
212
@PublishedApi
207
- internal class ArrayListSerializer <E >(element : KSerializer <E >) : ListLikeSerializer <E, List<E>, ArrayList<E>>(element) {
213
+ internal class ArrayListSerializer <E >(element : KSerializer <E >) : CollectionSerializer <E, List<E>, ArrayList<E>>(element) {
208
214
override val descriptor: SerialDescriptor = ArrayListClassDesc (element.descriptor)
209
- override fun List<E>.collectionSize (): Int = size
210
- override fun List<E>.collectionIterator (): Iterator <E > = iterator()
215
+
211
216
override fun builder (): ArrayList <E > = arrayListOf ()
212
217
override fun ArrayList<E>.builderSize (): Int = size
213
218
override fun ArrayList<E>.toResult (): List <E > = this
@@ -219,11 +224,9 @@ internal class ArrayListSerializer<E>(element: KSerializer<E>) : ListLikeSeriali
219
224
@PublishedApi
220
225
internal class LinkedHashSetSerializer <E >(
221
226
eSerializer : KSerializer <E >
222
- ) : ListLikeSerializer<E, Set<E>, LinkedHashSet<E>>(eSerializer) {
223
-
227
+ ) : CollectionSerializer<E, Set<E>, LinkedHashSet<E>>(eSerializer) {
224
228
override val descriptor: SerialDescriptor = LinkedHashSetClassDesc (eSerializer.descriptor)
225
- override fun Set<E>.collectionSize (): Int = size
226
- override fun Set<E>.collectionIterator (): Iterator <E > = iterator()
229
+
227
230
override fun builder (): LinkedHashSet <E > = linkedSetOf()
228
231
override fun LinkedHashSet<E>.builderSize (): Int = size
229
232
override fun LinkedHashSet<E>.toResult (): Set <E > = this
@@ -235,11 +238,9 @@ internal class LinkedHashSetSerializer<E>(
235
238
@PublishedApi
236
239
internal class HashSetSerializer <E >(
237
240
eSerializer : KSerializer <E >
238
- ) : ListLikeSerializer<E, Set<E>, HashSet<E>>(eSerializer) {
239
-
241
+ ) : CollectionSerializer<E, Set<E>, HashSet<E>>(eSerializer) {
240
242
override val descriptor: SerialDescriptor = HashSetClassDesc (eSerializer.descriptor)
241
- override fun Set<E>.collectionSize (): Int = size
242
- override fun Set<E>.collectionIterator (): Iterator <E > = iterator()
243
+
243
244
override fun builder (): HashSet <E > = HashSet ()
244
245
override fun HashSet<E>.builderSize (): Int = size
245
246
override fun HashSet<E>.toResult (): Set <E > = this
0 commit comments