@@ -24,6 +24,7 @@ import kotlin.reflect.full.hasAnnotation
24
24
import kotlin.reflect.full.memberProperties
25
25
import kotlin.reflect.full.primaryConstructor
26
26
import kotlin.reflect.jvm.internal.KotlinReflectionInternalError
27
+ import kotlin.reflect.jvm.javaGetter
27
28
import kotlin.reflect.jvm.javaType
28
29
import kotlin.reflect.jvm.kotlinFunction
29
30
@@ -33,7 +34,7 @@ internal class KotlinNamesAnnotationIntrospector(
33
34
val ignoredClassesForImplyingJsonCreator : Set <KClass <* >>,
34
35
val useKotlinPropertyNameForGetter : Boolean
35
36
) : NopAnnotationIntrospector() {
36
- private fun getterNameFromJava (member : AnnotatedMember ): String? {
37
+ private fun getterNameFromJava (member : AnnotatedMethod ): String? {
37
38
val name = member.name
38
39
39
40
// The reason for truncating after `-` is to truncate the random suffix
@@ -55,13 +56,25 @@ internal class KotlinNamesAnnotationIntrospector(
55
56
}
56
57
}
57
58
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
+
58
68
// since 2.4
59
69
override fun findImplicitPropertyName (member : AnnotatedMember ): String? {
60
70
if (! member.declaringClass.isKotlinClass()) return null
61
71
62
72
return when (member) {
63
73
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)
65
78
} else null
66
79
is AnnotatedParameter -> findKotlinParameterName(member)
67
80
else -> null
0 commit comments