Skip to content

Commit b1d0761

Browse files
committed
Fixed to use definition names in Kotlin
1 parent a8323d3 commit b1d0761

File tree

1 file changed

+12
-31
lines changed

1 file changed

+12
-31
lines changed

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

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

33
import com.fasterxml.jackson.annotation.JsonCreator
44
import com.fasterxml.jackson.annotation.JsonProperty
5-
import com.fasterxml.jackson.databind.PropertyName
6-
import com.fasterxml.jackson.databind.cfg.MapperConfig
75
import com.fasterxml.jackson.databind.introspect.Annotated
86
import com.fasterxml.jackson.databind.introspect.AnnotatedConstructor
97
import com.fasterxml.jackson.databind.introspect.AnnotatedField
108
import com.fasterxml.jackson.databind.introspect.AnnotatedMember
119
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod
1210
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter
1311
import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector
14-
import com.fasterxml.jackson.databind.util.BeanUtil
12+
import kotlinx.metadata.jvm.fieldSignature
13+
import kotlinx.metadata.jvm.getterSignature
1514
import java.lang.reflect.Constructor
1615
import java.lang.reflect.Method
17-
import java.util.Locale
1816
import kotlin.reflect.KClass
1917
import kotlin.reflect.KFunction
2018
import kotlin.reflect.KParameter
@@ -30,35 +28,18 @@ import kotlin.reflect.jvm.kotlinFunction
3028
internal class KotlinNamesAnnotationIntrospector(val module: KotlinModule, val cache: ReflectionCache, val ignoredClassesForImplyingJsonCreator: Set<KClass<*>>) : NopAnnotationIntrospector() {
3129
// since 2.4
3230
override fun findImplicitPropertyName(member: AnnotatedMember): String? = when (member) {
33-
is AnnotatedMethod -> if (member.name.contains('-') && member.parameterCount == 0) {
34-
when {
35-
member.name.startsWith("get") -> member.name.substringAfter("get")
36-
member.name.startsWith("is") -> member.name.substringAfter("is")
37-
else -> null
38-
}?.replaceFirstChar { it.lowercase(Locale.getDefault()) }?.substringBefore('-')
39-
} else null
40-
is AnnotatedParameter -> findKotlinParameterName(member)
41-
else -> null
42-
}
31+
is AnnotatedMethod -> member.annotated.declaringClass.toKmClass()?.let { kmClass ->
32+
val methodSignature = member.annotated.toSignature()
4333

44-
// since 2.11: support Kotlin's way of handling "isXxx" backed properties where
45-
// logical property name needs to remain "isXxx" and not become "xxx" as with Java Beans
46-
// (see https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html and
47-
// https://github.com/FasterXML/jackson-databind/issues/2527
48-
// for details)
49-
override fun findRenameByField(
50-
config: MapperConfig<*>,
51-
field: AnnotatedField,
52-
implName: PropertyName
53-
): PropertyName? {
54-
val origSimple = implName.simpleName
55-
if (field.declaringClass.isKotlinClass() && origSimple.startsWith("is")) {
56-
val mangledName: String? = BeanUtil.stdManglePropertyName(origSimple, 2)
57-
if ((mangledName != null) && !mangledName.equals(origSimple)) {
58-
return PropertyName.construct(mangledName)
59-
}
34+
kmClass.properties.find { it.getterSignature == methodSignature }?.name
6035
}
61-
return null
36+
is AnnotatedField -> member.annotated.declaringClass.toKmClass()?.let { kmClass ->
37+
val fieldSignature = member.annotated.toSignature()
38+
39+
kmClass.properties.find { it.fieldSignature == fieldSignature }?.name
40+
}
41+
is AnnotatedParameter -> findKotlinParameterName(member)
42+
else -> null
6243
}
6344

6445
@Suppress("UNCHECKED_CAST")

0 commit comments

Comments
 (0)