Skip to content

Commit b4bf736

Browse files
committed
Fix nullish issue
1 parent 9c437a9 commit b4bf736

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/main/kotlin/com/fasterxml/jackson/module/kotlin/deser/value_instantiator/KotlinValueInstantiator.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.fasterxml.jackson.databind.deser.std.StdValueInstantiator
1212
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
1313
import com.fasterxml.jackson.module.kotlin.ReflectionCache
1414
import com.fasterxml.jackson.module.kotlin.deser.value_instantiator.creator.ValueCreator
15+
import com.fasterxml.jackson.module.kotlin.deser.value_instantiator.creator.ValueParameter
1516
import com.fasterxml.jackson.module.kotlin.isKotlinClass
1617
import com.fasterxml.jackson.module.kotlin.wrapWithPath
1718
import kotlin.reflect.KParameter
@@ -25,6 +26,10 @@ internal class KotlinValueInstantiator(
2526
private val nullIsSameAsDefault: Boolean,
2627
private val strictNullChecks: Boolean
2728
) : StdValueInstantiator(src) {
29+
// If the collection type argument cannot be obtained, treat it as nullable
30+
// @see com.fasterxml.jackson.module.kotlin._ported.test.StrictNullChecksTest#testListOfGenericWithNullValue
31+
private fun ValueParameter.isNullishTypeAt(index: Int) = arguments.getOrNull(index)?.isNullable ?: true
32+
2833
override fun createFromObjectWith(
2934
ctxt: DeserializationContext,
3035
props: Array<out SettableBeanProperty>,
@@ -76,11 +81,11 @@ internal class KotlinValueInstantiator(
7681
// If an error occurs, Argument.name is always non-null
7782
// @see com.fasterxml.jackson.module.kotlin.deser.value_instantiator.creator.Argument
7883
when {
79-
paramVal is Collection<*> && !paramDef.arguments[0].isNullable && paramVal.any { it == null } ->
84+
paramVal is Collection<*> && !paramDef.isNullishTypeAt(0) && paramVal.any { it == null } ->
8085
"collection" to paramDef.arguments[0].name!!
81-
paramVal is Array<*> && !paramDef.arguments[0].isNullable && paramVal.any { it == null } ->
86+
paramVal is Array<*> && !paramDef.isNullishTypeAt(0) && paramVal.any { it == null } ->
8287
"array" to paramDef.arguments[0].name!!
83-
paramVal is Map<*, *> && !paramDef.arguments[1].isNullable && paramVal.values.any { it == null } ->
88+
paramVal is Map<*, *> && !paramDef.isNullishTypeAt(1) && paramVal.values.any { it == null } ->
8489
"map" to paramDef.arguments[1].name!!
8590
else -> null
8691
}?.let { (paramType, itemType) ->

0 commit comments

Comments
 (0)