Skip to content

Commit

Permalink
Merge pull request #646 from k163377/drop-kotlin-1.4
Browse files Browse the repository at this point in the history
In 2.15, fixed to not be able to use Kotlin 1.4 or lower.
  • Loading branch information
k163377 committed Mar 15, 2023
2 parents 581cb83 + 2a09127 commit 37cfc5d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 31 deletions.
Expand Up @@ -65,40 +65,34 @@ internal class KotlinAnnotationIntrospector(private val context: Module.SetupCon
// Find a serializer to handle the case where the getter returns an unboxed value from the value class.
override fun findSerializer(am: Annotated): StdSerializer<*>? = when (am) {
is AnnotatedMethod -> {
when (KotlinVersion.CURRENT.isAtLeast(1, 5)) {
true -> {
val getter = am.member.apply {
// If the return value of the getter is a value class,
// it will be serialized properly without doing anything.
if (this.returnType.isUnboxableValueClass()) return null
val getter = am.member.apply {
// If the return value of the getter is a value class,
// it will be serialized properly without doing anything.
if (this.returnType.isUnboxableValueClass()) return null
}

val kotlinProperty = getter
.declaringClass
.kotlin
.let {
// KotlinReflectionInternalError is raised in GitHub167 test,
// but it looks like an edge case, so it is ignored.
try {
it.memberProperties
} catch (e: Error) {
null
}
}?.find { it.javaGetter == getter }

val kotlinProperty = getter
.declaringClass
.kotlin
.let {
// KotlinReflectionInternalError is raised in GitHub167 test,
// but it looks like an edge case, so it is ignored.
try {
it.memberProperties
} catch (e: Error) {
null
}
}?.find { it.javaGetter == getter }

(kotlinProperty?.returnType?.classifier as? KClass<*>)
?.takeIf { it.isValue }
?.java
?.let { outerClazz ->
val innerClazz = getter.returnType

ValueClassStaticJsonValueSerializer.createdOrNull(outerClazz, innerClazz)
?: @Suppress("UNCHECKED_CAST") ValueClassBoxSerializer(outerClazz, innerClazz)
}
(kotlinProperty?.returnType?.classifier as? KClass<*>)
?.takeIf { it.isValue }
?.java
?.let { outerClazz ->
val innerClazz = getter.returnType

ValueClassStaticJsonValueSerializer.createdOrNull(outerClazz, innerClazz)
?: @Suppress("UNCHECKED_CAST") ValueClassBoxSerializer(outerClazz, innerClazz)
}
// Kotlin 1.4 and lower doesn't have value classes and we avoid the NoSuchMethodException on it.isValue
else -> null
}
}
// Ignore the case of AnnotatedField, because JvmField cannot be set in the field of value class.
else -> null
Expand Down
@@ -1,5 +1,6 @@
package com.fasterxml.jackson.module.kotlin

import com.fasterxml.jackson.databind.JsonMappingException
import com.fasterxml.jackson.databind.MapperFeature
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.module.kotlin.KotlinFeature.NullIsSameAsDefault
Expand Down Expand Up @@ -54,6 +55,16 @@ class KotlinModule @Deprecated(
val singletonSupport: SingletonSupport = DISABLED,
val strictNullChecks: Boolean = false
) : SimpleModule(KotlinModule::class.java.name, PackageVersion.VERSION) {
init {
if (!KotlinVersion.CURRENT.isAtLeast(1, 5)) {
// Kotlin 1.4 was deprecated when this process was introduced(jackson-module-kotlin 2.15).
throw JsonMappingException(
null,
"KotlinModule requires Kotlin version >= 1.5 - Found ${KotlinVersion.CURRENT}"
)
}
}

@Deprecated(level = DeprecationLevel.HIDDEN, message = "For ABI compatibility")
constructor(
reflectionCacheSize: Int,
Expand Down

0 comments on commit 37cfc5d

Please sign in to comment.