Skip to content
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
6 changes: 3 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -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" }
Expand All @@ -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" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -200,6 +201,7 @@ public inline fun <reified T, reified U> JsonMapper.Builder.addMixIn(): JsonMapp
T::class.java,
U::class.java,
)
public inline fun <M : MapperBuilder<*, M>, reified T, reified U> M.addMixIn(): M = this.addMixIn(T::class.java, U::class.java)

public operator fun ArrayNode.plus(element: Boolean) {
add(element)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
}
Loading