Skip to content

Commit

Permalink
Fix lookup of primitive array serializers by Java type token (#1708)
Browse files Browse the repository at this point in the history
Fixes #1707
  • Loading branch information
sandwwraith committed Sep 30, 2021
1 parent 5ce8e2c commit bb0d274
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
6 changes: 3 additions & 3 deletions core/jvmMain/src/kotlinx/serialization/SerializersJvm.kt
Expand Up @@ -124,13 +124,13 @@ private fun SerializersModule.serializerByJavaTypeImpl(type: Type, failOnMissing

@OptIn(ExperimentalSerializationApi::class)
private fun SerializersModule.typeSerializer(type: Class<*>, failOnMissingTypeArgSerializer: Boolean): KSerializer<Any>? {
return if (!type.isArray) {
reflectiveOrContextual(type.kotlin as KClass<Any>, emptyList())
} else {
return if (type.isArray && !type.componentType.isPrimitive) {
val eType: Class<*> = type.componentType
val s = if (failOnMissingTypeArgSerializer) serializer(eType) else (serializerOrNull(eType) ?: return null)
val arraySerializer = ArraySerializer(eType.kotlin as KClass<Any>, s)
arraySerializer as KSerializer<Any>
} else {
reflectiveOrContextual(type.kotlin as KClass<Any>, emptyList())
}
}

Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
* Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/

package kotlinx.serialization.features
Expand Down Expand Up @@ -93,6 +93,15 @@ class SerializerByTypeTest {
assertSerializedWithType(token, """["a","b","c"]""", myArr)
}

@Test
fun testPrimitiveArrayResolving() {
val myArr = intArrayOf(1, 2, 3)
val token = IntArray::class.java
val name = serializer(token).descriptor.serialName
assertTrue(name.contains("IntArray"))
assertSerializedWithType(token, """[1,2,3]""", myArr)
}

@Test
fun testReifiedListResolving() {
val myList = listOf("a", "b", "c")
Expand Down

0 comments on commit bb0d274

Please sign in to comment.