@@ -15,20 +15,18 @@ import com.fasterxml.jackson.databind.jsontype.NamedType
15
15
import com.fasterxml.jackson.databind.ser.std.StdSerializer
16
16
import com.fasterxml.jackson.module.kotlin.ser.serializers.ValueClassBoxSerializer
17
17
import com.fasterxml.jackson.module.kotlin.ser.serializers.ValueClassStaticJsonValueSerializer
18
+ import kotlinx.metadata.Flag
18
19
import kotlinx.metadata.KmClassifier
20
+ import kotlinx.metadata.KmProperty
19
21
import kotlinx.metadata.jvm.getterSignature
22
+ import kotlinx.metadata.jvm.setterSignature
20
23
import java.lang.reflect.AccessibleObject
21
24
import java.lang.reflect.Constructor
22
25
import java.lang.reflect.Field
23
26
import java.lang.reflect.Method
24
27
import kotlin.reflect.KFunction
25
- import kotlin.reflect.KMutableProperty1
26
- import kotlin.reflect.KProperty1
27
28
import kotlin.reflect.KType
28
29
import kotlin.reflect.full.createType
29
- import kotlin.reflect.full.declaredMemberProperties
30
- import kotlin.reflect.jvm.javaGetter
31
- import kotlin.reflect.jvm.javaSetter
32
30
import kotlin.reflect.jvm.javaType
33
31
import kotlin.reflect.jvm.kotlinFunction
34
32
import kotlin.reflect.jvm.kotlinProperty
@@ -150,20 +148,19 @@ internal class KotlinAnnotationIntrospector(
150
148
return (this .annotations.firstOrNull { it.annotationClass.java == JsonProperty ::class .java } as ? JsonProperty )?.required
151
149
}
152
150
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)
156
152
157
153
// This could be a setter or a getter of a class property or
158
154
// a setter-like/getter-like method.
159
155
private fun AnnotatedMethod.hasRequiredMarker (): Boolean? = this .getRequiredMarkerFromCorrespondingAccessor()
160
156
? : this .member.getRequiredMarkerFromAccessorLikeMethod()
161
157
162
158
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) {
165
162
val byAnnotation = this .member.isRequiredByAnnotation()
166
- val byNullability = kProperty .isRequiredByNullability()
163
+ val byNullability = kmProperty .isRequiredByNullability()
167
164
return requiredAnnotationOrNullability(byAnnotation, byNullability)
168
165
}
169
166
}
0 commit comments