Skip to content

Commit 01fc544

Browse files
committed
Merge branch '2.19' of github.com:FasterXML/jackson-module-kotlin into 2.19
2 parents bf4397f + f9af327 commit 01fc544

File tree

128 files changed

+7912
-570
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+7912
-570
lines changed

release-notes/CREDITS-2.x

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ Contributors:
1717

1818
# 2.19.1 (not yet released)
1919

20+
WrongWrong (@k163377)
21+
* #986: Optimize imports
22+
2023
# 2.19.0 (24-Apr-2025)
2124

2225
WrongWrong (@k163377)

src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package com.fasterxml.jackson.module.kotlin
22

33
import com.fasterxml.jackson.databind.MapperFeature
44
import com.fasterxml.jackson.databind.module.SimpleModule
5+
import com.fasterxml.jackson.module.kotlin.KotlinFeature.KotlinPropertyNameAsImplicitName
6+
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NewStrictNullChecks
57
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullIsSameAsDefault
68
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullToEmptyCollection
79
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullToEmptyMap
810
import com.fasterxml.jackson.module.kotlin.KotlinFeature.SingletonSupport
911
import com.fasterxml.jackson.module.kotlin.KotlinFeature.StrictNullChecks
10-
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NewStrictNullChecks
11-
import com.fasterxml.jackson.module.kotlin.KotlinFeature.KotlinPropertyNameAsImplicitName
1212
import com.fasterxml.jackson.module.kotlin.KotlinFeature.UseJavaDurationConversion
1313
import java.util.*
1414

src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinNamesAnnotationIntrospector.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector
1414
import com.fasterxml.jackson.databind.introspect.PotentialCreator
1515
import java.lang.reflect.Constructor
1616
import java.util.Locale
17-
import kotlin.collections.getOrNull
1817
import kotlin.reflect.KClass
1918
import kotlin.reflect.KFunction
2019
import kotlin.reflect.KParameter

src/test/kotlin/com/fasterxml/jackson/module/kotlin/ArgumentBucketTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package com.fasterxml.jackson.module.kotlin
22

33
import com.fasterxml.jackson.annotation.JsonCreator
44
import org.junit.jupiter.api.Nested
5+
import org.junit.jupiter.api.Test
56
import kotlin.reflect.KFunction
67
import kotlin.reflect.full.functions
78
import kotlin.reflect.full.hasAnnotation
8-
import org.junit.jupiter.api.Test
99
import kotlin.test.assertEquals
1010
import kotlin.test.assertFalse
1111
import kotlin.test.assertTrue

src/test/kotlin/com/fasterxml/jackson/module/kotlin/DslTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package com.fasterxml.jackson.module.kotlin
22

33
import com.fasterxml.jackson.core.json.JsonReadFeature
44
import com.fasterxml.jackson.core.json.JsonWriteFeature
5+
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NewStrictNullChecks
56
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullIsSameAsDefault
67
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullToEmptyCollection
78
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullToEmptyMap
89
import com.fasterxml.jackson.module.kotlin.KotlinFeature.SingletonSupport
9-
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NewStrictNullChecks
1010
import org.junit.jupiter.api.Assertions.assertNotNull
1111
import org.junit.jupiter.api.Test
1212
import kotlin.test.assertEquals

src/test/kotlin/com/fasterxml/jackson/module/kotlin/KotlinInstantiatorsTest.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import org.junit.jupiter.api.Assertions.*
55
import org.junit.jupiter.api.Test
66

77
class KotlinInstantiatorsTest {
8-
private val mapper = jacksonObjectMapper()
9-
private val deserConfig = mapper.deserializationConfig
8+
private val deserConfig = defaultMapper.deserializationConfig
109

1110
private val kotlinInstantiators = KotlinInstantiators(
1211
ReflectionCache(10),
@@ -18,7 +17,7 @@ class KotlinInstantiatorsTest {
1817

1918
@Test
2019
fun `Provides default instantiator for Java class`() {
21-
val javaType = mapper.constructType(String::class.java)
20+
val javaType = defaultMapper.constructType(String::class.java)
2221
val defaultInstantiator = StdValueInstantiator(deserConfig, javaType)
2322
val instantiator = kotlinInstantiators.findValueInstantiator(
2423
deserConfig,
@@ -33,7 +32,7 @@ class KotlinInstantiatorsTest {
3332
fun `Provides KotlinValueInstantiator for Kotlin class`() {
3433
class TestClass
3534

36-
val javaType = mapper.constructType(TestClass::class.java)
35+
val javaType = defaultMapper.constructType(TestClass::class.java)
3736
val instantiator = kotlinInstantiators.findValueInstantiator(
3837
deserConfig,
3938
deserConfig.introspect(javaType),
@@ -51,15 +50,15 @@ class KotlinInstantiatorsTest {
5150

5251
val subClassInstantiator = object : StdValueInstantiator(
5352
deserConfig,
54-
mapper.constructType(DefaultClass::class.java)
53+
defaultMapper.constructType(DefaultClass::class.java)
5554
) {}
5655

5756
assertThrows(IllegalStateException::class.java) {
5857
kotlinInstantiators.findValueInstantiator(
5958
deserConfig,
60-
deserConfig.introspect(mapper.constructType(TestClass::class.java)),
59+
deserConfig.introspect(defaultMapper.constructType(TestClass::class.java)),
6160
subClassInstantiator
6261
)
6362
}
6463
}
65-
}
64+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/JacksonInjectTest.kt

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,51 @@ class JacksonInjectTest {
2626
@get:JacksonInject("noNNn")
2727
val noNNn: NullableObject?,
2828
@get:JacksonInject("noNN")
29-
val noNN: NullableObject?
29+
val noNN: NullableObject?,
30+
@get:JacksonInject("npNnNn")
31+
val npNnNn: NullablePrimitive,
32+
@get:JacksonInject("npNnN")
33+
val npNnN: NullablePrimitive,
34+
@get:JacksonInject("npNNn")
35+
val npNNn: NullablePrimitive?,
36+
@get:JacksonInject("npNN")
37+
val npNN: NullablePrimitive?,
38+
@get:JacksonInject("tupNn")
39+
val tupNn: TwoUnitPrimitive,
40+
@get:JacksonInject("tupN")
41+
val tupN: TwoUnitPrimitive?
3042
)
3143

3244
@Test
3345
fun test() {
34-
val injectables = InjectableValues.Std(
35-
mapOf(
36-
"pNn" to Primitive(0),
37-
"pN" to Primitive(1),
38-
"nnoNn" to NonNullObject("nnoNn"),
39-
"nnoN" to NonNullObject("nnoN"),
40-
"noNnNn" to NullableObject("noNnNn"),
41-
"noNnN" to NullableObject(null),
42-
"noNNn" to NullableObject("noNNn"),
43-
"noNN" to NullableObject(null)
44-
)
46+
val injectables = mapOf(
47+
"pNn" to Primitive(0),
48+
"pN" to Primitive(1),
49+
"nnoNn" to NonNullObject("nnoNn"),
50+
"nnoN" to NonNullObject("nnoN"),
51+
"noNnNn" to NullableObject("noNnNn"),
52+
"noNnN" to NullableObject(null),
53+
"noNNn" to NullableObject("noNNn"),
54+
"noNN" to NullableObject(null),
55+
"npNnNn" to NullablePrimitive(0),
56+
"npNnN" to NullablePrimitive(null),
57+
"npNNn" to NullablePrimitive(1),
58+
"npNN" to NullablePrimitive(null),
59+
"tupNn" to TwoUnitPrimitive(3),
60+
"tupN" to TwoUnitPrimitive(4)
4561
)
4662

4763
val reader = jacksonObjectMapper()
4864
.readerFor(Dto::class.java)
49-
.with(injectables)
65+
.with(InjectableValues.Std(injectables))
66+
67+
val result = reader.readValue<Dto>("{}")
68+
val expected = ::Dto.let { ctor ->
69+
val args = ctor.parameters.associateWith { injectables[it.name] }
70+
ctor.callBy(args)
71+
}
5072

51-
println(reader.readValue<Dto>("{}"))
73+
assertEquals(expected, result)
5274
}
5375

5476
data class DataBind4218FailingDto(

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/NullableObjectEdgeCases.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import com.fasterxml.jackson.databind.DeserializationContext
77
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
88
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
99
import com.fasterxml.jackson.module.kotlin.WrapsNullableValueClassDeserializer
10-
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
10+
import com.fasterxml.jackson.module.kotlin.defaultMapper
1111
import com.fasterxml.jackson.module.kotlin.readValue
12-
import kotlin.reflect.jvm.internal.KotlinReflectionInternalError
1312
import org.junit.jupiter.api.Assertions.assertEquals
1413
import org.junit.jupiter.api.Test
1514
import org.junit.jupiter.api.assertThrows
15+
import kotlin.reflect.jvm.internal.KotlinReflectionInternalError
1616

1717
class NullableObjectEdgeCases {
1818
@JvmInline
@@ -38,7 +38,7 @@ class NullableObjectEdgeCases {
3838

3939
@Test
4040
fun nullValueIsUsedPreferentially() {
41-
val result = jacksonObjectMapper().readValue<NullValue>("""{"nn":null,"n":null}""")
41+
val result = defaultMapper.readValue<NullValue>("""{"nn":null,"n":null}""")
4242
assertEquals(NullValue(NullValueDeserializer.nv, NullValueDeserializer.nv), result)
4343
}
4444

@@ -62,7 +62,7 @@ class NullableObjectEdgeCases {
6262
@Test
6363
fun `Nulls_SKIP works`() {
6464
assertThrows<KotlinReflectionInternalError>("#761(KT-57357) fixed") {
65-
val result = jacksonObjectMapper().readValue<NullsSkip>("""{"nn":null,"n":null}""")
65+
val result = defaultMapper.readValue<NullsSkip>("""{"nn":null,"n":null}""")
6666
assertEquals(NullValue(VC("skip"), VC("skip")), result)
6767
}
6868
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/ValueClasses.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,29 @@ value class NullableObject(val v: String?) {
4242
override fun deserializeKey(key: String, ctxt: DeserializationContext) = NullableObject("$key-deser")
4343
}
4444
}
45+
46+
@JvmInline
47+
value class NullablePrimitive(val v: Int?) {
48+
class DeserializerWrapsNullable : WrapsNullableValueClassDeserializer<NullablePrimitive>(NullablePrimitive::class) {
49+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = NullablePrimitive(
50+
p.intValue + 100
51+
)
52+
53+
override fun getBoxedNullValue(): NullablePrimitive = NullablePrimitive(null)
54+
}
55+
56+
class KeyDeserializer : JacksonKeyDeserializer() {
57+
override fun deserializeKey(key: String, ctxt: DeserializationContext) = NullablePrimitive(key.toInt() + 100)
58+
}
59+
}
60+
61+
@JvmInline
62+
value class TwoUnitPrimitive(val v: Long) {
63+
class Deserializer : StdDeserializer<TwoUnitPrimitive>(TwoUnitPrimitive::class.java) {
64+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): TwoUnitPrimitive = TwoUnitPrimitive(p.longValue + 100)
65+
}
66+
67+
class KeyDeserializer : JacksonKeyDeserializer() {
68+
override fun deserializeKey(key: String, ctxt: DeserializationContext) = TwoUnitPrimitive(key.toLong() + 100)
69+
}
70+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/WithoutCustomDeserializeMethodTest.kt

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass
22

33
import com.fasterxml.jackson.module.kotlin.defaultMapper
4-
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
54
import com.fasterxml.jackson.module.kotlin.readValue
65
import org.junit.jupiter.api.Assertions.assertEquals
76
import org.junit.jupiter.api.Assertions.assertTrue
87
import org.junit.jupiter.api.Nested
9-
import org.junit.jupiter.api.assertThrows
108
import org.junit.jupiter.api.Test
9+
import org.junit.jupiter.api.assertThrows
1110
import java.lang.reflect.InvocationTargetException
1211
import kotlin.test.assertNotEquals
1312

1413
class WithoutCustomDeserializeMethodTest {
1514
companion object {
16-
val mapper = jacksonObjectMapper()
1715
val throwable = IllegalArgumentException("test")
1816
}
1917

@@ -47,6 +45,29 @@ class WithoutCustomDeserializeMethodTest {
4745
assertNotEquals(NullableObject(null), result, "kogera #209 has been fixed.")
4846
}
4947
}
48+
49+
@Suppress("ClassName")
50+
@Nested
51+
inner class NullablePrimitive_ {
52+
@Test
53+
fun value() {
54+
val result = defaultMapper.readValue<NullablePrimitive>("1")
55+
assertEquals(NullablePrimitive(1), result)
56+
}
57+
58+
// failing
59+
@Test
60+
fun nullString() {
61+
val result = defaultMapper.readValue<NullablePrimitive?>("null")
62+
assertNotEquals(NullablePrimitive(null), result, "#209 has been fixed.")
63+
}
64+
}
65+
66+
@Test
67+
fun twoUnitPrimitive() {
68+
val result = defaultMapper.readValue<TwoUnitPrimitive>("1")
69+
assertEquals(TwoUnitPrimitive(1), result)
70+
}
5071
}
5172

5273
data class Dst(
@@ -55,7 +76,11 @@ class WithoutCustomDeserializeMethodTest {
5576
val nnoNn: NonNullObject,
5677
val nnoN: NonNullObject?,
5778
val noNn: NullableObject,
58-
val noN: NullableObject?
79+
val noN: NullableObject?,
80+
val npNn: NullablePrimitive,
81+
val npN: NullablePrimitive?,
82+
val tupNn: TwoUnitPrimitive,
83+
val tupN: TwoUnitPrimitive?
5984
)
6085

6186
@Test
@@ -66,10 +91,14 @@ class WithoutCustomDeserializeMethodTest {
6691
NonNullObject("foo"),
6792
NonNullObject("bar"),
6893
NullableObject("baz"),
69-
NullableObject("qux")
94+
NullableObject("qux"),
95+
NullablePrimitive(1),
96+
NullablePrimitive(2),
97+
TwoUnitPrimitive(3),
98+
TwoUnitPrimitive(4)
7099
)
71-
val src = mapper.writeValueAsString(expected)
72-
val result = mapper.readValue<Dst>(src)
100+
val src = defaultMapper.writeValueAsString(expected)
101+
val result = defaultMapper.readValue<Dst>(src)
73102

74103
assertEquals(expected, result)
75104
}
@@ -82,10 +111,14 @@ class WithoutCustomDeserializeMethodTest {
82111
NonNullObject("foo"),
83112
null,
84113
NullableObject(null),
114+
null,
115+
NullablePrimitive(null),
116+
null,
117+
TwoUnitPrimitive(3),
85118
null
86119
)
87-
val src = mapper.writeValueAsString(expected)
88-
val result = mapper.readValue<Dst>(src)
120+
val src = defaultMapper.writeValueAsString(expected)
121+
val result = defaultMapper.readValue<Dst>(src)
89122

90123
assertEquals(expected, result)
91124
}

0 commit comments

Comments
 (0)