Skip to content

Commit 06a8a51

Browse files
committed
Replace with kotlinx.metadata
1 parent 374f78a commit 06a8a51

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,18 @@ import com.fasterxml.jackson.databind.jsontype.NamedType
1515
import com.fasterxml.jackson.databind.ser.std.StdSerializer
1616
import com.fasterxml.jackson.module.kotlin.ser.serializers.ValueClassBoxSerializer
1717
import com.fasterxml.jackson.module.kotlin.ser.serializers.ValueClassStaticJsonValueSerializer
18+
import kotlinx.metadata.Flag
1819
import kotlinx.metadata.KmClassifier
20+
import kotlinx.metadata.KmProperty
1921
import kotlinx.metadata.jvm.getterSignature
22+
import kotlinx.metadata.jvm.setterSignature
2023
import java.lang.reflect.AccessibleObject
2124
import java.lang.reflect.Constructor
2225
import java.lang.reflect.Field
2326
import java.lang.reflect.Method
2427
import kotlin.reflect.KFunction
25-
import kotlin.reflect.KMutableProperty1
26-
import kotlin.reflect.KProperty1
2728
import kotlin.reflect.KType
2829
import kotlin.reflect.full.createType
29-
import kotlin.reflect.full.declaredMemberProperties
30-
import kotlin.reflect.jvm.javaGetter
31-
import kotlin.reflect.jvm.javaSetter
3230
import kotlin.reflect.jvm.javaType
3331
import kotlin.reflect.jvm.kotlinFunction
3432
import kotlin.reflect.jvm.kotlinProperty
@@ -150,20 +148,19 @@ internal class KotlinAnnotationIntrospector(
150148
return (this.annotations.firstOrNull { it.annotationClass.java == JsonProperty::class.java } as? JsonProperty)?.required
151149
}
152150

153-
// Since Kotlin's property has the same Type for each field, getter, and setter,
154-
// nullability can be determined from the returnType of KProperty.
155-
private fun KProperty1<*, *>.isRequiredByNullability() = returnType.isRequired()
151+
private fun KmProperty.isRequiredByNullability(): Boolean = !Flag.Type.IS_NULLABLE(this.returnType.flags)
156152

157153
// This could be a setter or a getter of a class property or
158154
// a setter-like/getter-like method.
159155
private fun AnnotatedMethod.hasRequiredMarker(): Boolean? = this.getRequiredMarkerFromCorrespondingAccessor()
160156
?: this.member.getRequiredMarkerFromAccessorLikeMethod()
161157

162158
private fun AnnotatedMethod.getRequiredMarkerFromCorrespondingAccessor(): Boolean? {
163-
member.declaringClass.kotlin.declaredMemberProperties.forEach { kProperty ->
164-
if (kProperty.javaGetter == this.member || (kProperty as? KMutableProperty1)?.javaSetter == this.member) {
159+
val memberSignature = member.toSignature()
160+
member.declaringClass.toKmClass()?.properties?.forEach { kmProperty ->
161+
if (kmProperty.getterSignature == memberSignature || kmProperty.setterSignature == memberSignature) {
165162
val byAnnotation = this.member.isRequiredByAnnotation()
166-
val byNullability = kProperty.isRequiredByNullability()
163+
val byNullability = kmProperty.isRequiredByNullability()
167164
return requiredAnnotationOrNullability(byAnnotation, byNullability)
168165
}
169166
}

0 commit comments

Comments
 (0)