Skip to content

Commit cbbcfbe

Browse files
committed
Implement getting from Kotlin property name
1 parent 3dd5407 commit cbbcfbe

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import kotlin.reflect.full.hasAnnotation
2424
import kotlin.reflect.full.memberProperties
2525
import kotlin.reflect.full.primaryConstructor
2626
import kotlin.reflect.jvm.internal.KotlinReflectionInternalError
27+
import kotlin.reflect.jvm.javaGetter
2728
import kotlin.reflect.jvm.javaType
2829
import kotlin.reflect.jvm.kotlinFunction
2930

@@ -33,7 +34,7 @@ internal class KotlinNamesAnnotationIntrospector(
3334
val ignoredClassesForImplyingJsonCreator: Set<KClass<*>>,
3435
val useKotlinPropertyNameForGetter: Boolean
3536
) : NopAnnotationIntrospector() {
36-
private fun getterNameFromJava(member: AnnotatedMember): String? {
37+
private fun getterNameFromJava(member: AnnotatedMethod): String? {
3738
val name = member.name
3839

3940
// The reason for truncating after `-` is to truncate the random suffix
@@ -55,13 +56,25 @@ internal class KotlinNamesAnnotationIntrospector(
5556
}
5657
}
5758

59+
private fun getterNameFromKotlin(member: AnnotatedMethod): String? {
60+
val getter = member.member
61+
62+
return member.member.declaringClass.takeIf { it.isKotlinClass() }?.let { clazz ->
63+
clazz.kotlin.memberProperties.find { it.javaGetter == getter }
64+
?.let { it.name }
65+
}
66+
}
67+
5868
// since 2.4
5969
override fun findImplicitPropertyName(member: AnnotatedMember): String? {
6070
if (!member.declaringClass.isKotlinClass()) return null
6171

6272
return when (member) {
6373
is AnnotatedMethod -> if (member.parameterCount == 0) {
64-
if (useKotlinPropertyNameForGetter) TODO() else getterNameFromJava(member)
74+
if (useKotlinPropertyNameForGetter) {
75+
// Fall back to default if it is a getter-like function
76+
getterNameFromKotlin(member) ?: getterNameFromJava(member)
77+
} else getterNameFromJava(member)
6578
} else null
6679
is AnnotatedParameter -> findKotlinParameterName(member)
6780
else -> null

0 commit comments

Comments
 (0)