Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

In 2.15, fixed to not be able to use Kotlin 1.4 or lower. #646

Merged
merged 3 commits into from
Mar 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
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)) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This has been removed as it is no longer needed once support for Kotlin 1.4 and below is removed.

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
Original file line number Diff line number Diff line change
@@ -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)) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// 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