Skip to content

Commit 00b320f

Browse files
authored
Merge pull request #710 from k163377/fix/default-prop
Fixed KotlinPropertyNameAsImplicitName not working in edge case
2 parents 56dcfc6 + 9004f37 commit 00b320f

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

release-notes/CREDITS-2.x

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kkurczewski
2121
* #689: Add KotlinDuration support
2222

2323
WrongWrong (@k163377)
24+
* #710: Fixed KotlinPropertyNameAsImplicitName not working in edge case
2425
* #709: Add failing test for #242
2526
* #707: Changed to use default argument on null if JsonSetter(nulls = Nulls.SKIP) is specified.
2627
* #700: Reduce the load on the search process for serializers

release-notes/VERSION-2.x

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Co-maintainers:
2828
#686: Added KotlinPropertyNameAsImplicitName feature to use Kotlin property names as implicit names for getters.
2929
Enabling this feature eliminates some of the problems summarized in #630,
3030
but also causes some behavioral changes and performance degradation.
31+
A minor correction has been made to this option in #710.
3132
#685: Streamline default value management for KotlinFeatures.
3233
This improves the initialization cost of kotlin-module a little.
3334
#684: Kotlin 1.5 has been deprecated and the minimum supported Kotlin version will be updated to 1.6.

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,12 @@ 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
9-
import com.fasterxml.jackson.databind.introspect.AnnotatedField
107
import com.fasterxml.jackson.databind.introspect.AnnotatedMember
118
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod
129
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter
1310
import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector
14-
import com.fasterxml.jackson.databind.util.BeanUtil
1511
import java.lang.reflect.Constructor
1612
import java.lang.reflect.Method
1713
import java.util.Locale
@@ -57,10 +53,11 @@ internal class KotlinNamesAnnotationIntrospector(
5753
}
5854

5955
private fun getterNameFromKotlin(member: AnnotatedMethod): String? {
60-
val getter = member.member
56+
val getterName = member.member.name
6157

6258
return member.member.declaringClass.takeIf { it.isKotlinClass() }?.let { clazz ->
63-
clazz.kotlin.memberProperties.find { it.javaGetter == getter }
59+
// For edge case, methods must be compared by name, not directly.
60+
clazz.kotlin.memberProperties.find { it.javaGetter?.name == getterName }
6461
?.let { it.name }
6562
}
6663
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.fasterxml.jackson.module.kotlin.test.github
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper
4+
import com.fasterxml.jackson.module.kotlin.KotlinFeature
5+
import com.fasterxml.jackson.module.kotlin.KotlinModule
6+
import org.junit.Test
7+
import kotlin.test.assertEquals
8+
9+
class Github710 {
10+
interface I<T> {
11+
val foo: T
12+
val bAr: T get() = foo
13+
}
14+
15+
class C(override val foo: Int) : I<Int>
16+
17+
@Test
18+
fun test() {
19+
val mapper = KotlinModule.Builder().enable(KotlinFeature.KotlinPropertyNameAsImplicitName)
20+
.let { ObjectMapper().registerModule(it.build()) }
21+
val result = mapper.writeValueAsString(C(1))
22+
23+
assertEquals("""{"foo":1,"bAr":1}""", result)
24+
}
25+
}

0 commit comments

Comments
 (0)