diff --git a/build.gradle.kts b/build.gradle.kts index b5d3485c..d4c6eab3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,7 +18,7 @@ val jacksonVersion = libs.versions.jackson.get() val generatedSrcPath = "${layout.buildDirectory.get()}/generated/kotlin" group = groupStr -version = "${jacksonVersion}-beta32" +version = "${jacksonVersion}-beta33" repositories { mavenCentral() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aef030fd..6abf9f63 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] kotlin = "2.1.21" # Mainly for CI, it can be rewritten by environment variable. -jackson = "2.20.1" +jackson = "2.20.2" # test libs -junit = "5.14.1" +junit = "5.14.3" [libraries] kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib" } @@ -16,7 +16,7 @@ jackson-annotations = { module = "com.fasterxml.jackson.core:jackson-annotations # test libs kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect" } junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" } -mockk = "io.mockk:mockk:1.14.6" +mockk = "io.mockk:mockk:1.14.9" jackson-xml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml" } jackson-csv = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-csv" } jackson-jsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" } diff --git a/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/Extensions.kt b/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/Extensions.kt index e64a50f5..08286c7f 100644 --- a/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/Extensions.kt +++ b/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/Extensions.kt @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.Module import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectReader import com.fasterxml.jackson.databind.RuntimeJsonMappingException +import com.fasterxml.jackson.databind.cfg.MapperBuilder import com.fasterxml.jackson.databind.cfg.MutableConfigOverride import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.databind.module.SimpleModule @@ -200,6 +201,7 @@ public inline fun JsonMapper.Builder.addMixIn(): JsonMapp T::class.java, U::class.java, ) +public inline fun , reified T, reified U> M.addMixIn(): M = this.addMixIn(T::class.java, U::class.java) public operator fun ArrayNode.plus(element: Boolean) { add(element) diff --git a/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/KotlinClassIntrospector.kt b/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/KotlinClassIntrospector.kt index ae4e3f9f..53f39447 100644 --- a/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/KotlinClassIntrospector.kt +++ b/src/main/kotlin/io/github/projectmapk/jackson/module/kogera/KotlinClassIntrospector.kt @@ -37,6 +37,8 @@ internal class KotlinBeanDescription(coll: POJOPropertiesCollector) : BasicBeanD internal object KotlinClassIntrospector : BasicClassIntrospector() { private fun readResolve(): Any = KotlinClassIntrospector + override fun copy(): KotlinClassIntrospector = this + override fun forSerialization( config: SerializationConfig, type: JavaType, diff --git a/src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zPorted/test/ExtensionMethodsTests.kt b/src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zPorted/test/ExtensionMethodsTests.kt index 35adb65f..d933d614 100644 --- a/src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zPorted/test/ExtensionMethodsTests.kt +++ b/src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zPorted/test/ExtensionMethodsTests.kt @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.databind.node.JsonNodeFactory +import com.fasterxml.jackson.dataformat.csv.CsvMapper import io.github.projectmapk.jackson.module.kogera.addMixIn import io.github.projectmapk.jackson.module.kogera.contains import io.github.projectmapk.jackson.module.kogera.convertValue @@ -101,4 +102,17 @@ private class TestExtensionMethods { assertEquals("{}", serializedPerson) } + + @Test fun mixInExtensionForGenericMapperBuilderTest() { + data class Person(val name: String) + abstract class PersonMixIn { @JsonIgnore var name: String = "" } + + // Assigned to a temporary variable to ensure that addMixIn returns a builder with the proper type + val mapperBuilder: CsvMapper.Builder = CsvMapper.builder() + .addMixIn<_, Person, PersonMixIn>() + val mapper: CsvMapper = mapperBuilder.build() + val serializedPerson: String = mapper.writeValueAsString(Person("test")) + + assertEquals("", serializedPerson) + } }