@@ -13,6 +13,7 @@ import java.lang.reflect.Field
1313import java.lang.reflect.Method
1414import kotlin.reflect.KFunction
1515import kotlin.reflect.KMutableProperty1
16+ import kotlin.reflect.KProperty1
1617import kotlin.reflect.KType
1718import kotlin.reflect.full.createType
1819import kotlin.reflect.full.declaredMemberProperties
@@ -96,26 +97,22 @@ internal class KotlinAnnotationIntrospector(private val context: Module.SetupCon
9697 return (this .annotations.firstOrNull { it.annotationClass.java == JsonProperty ::class .java } as ? JsonProperty )?.required
9798 }
9899
100+ // Since Kotlin's property has the same Type for each field, getter, and setter,
101+ // nullability can be determined from the returnType of KProperty.
102+ private fun KProperty1 <* , * >.isRequiredByNullability () = returnType.isRequired()
103+
99104 // This could be a setter or a getter of a class property or
100105 // a setter-like/getter-like method.
101106 private fun AnnotatedMethod.hasRequiredMarker (): Boolean? = this .getRequiredMarkerFromCorrespondingAccessor()
102107 ? : this .member.getRequiredMarkerFromAccessorLikeMethod()
103108
104109 private fun AnnotatedMethod.getRequiredMarkerFromCorrespondingAccessor (): Boolean? {
105110 member.declaringClass.kotlin.declaredMemberProperties.forEach { kProperty ->
106- kProperty.javaGetter
107- ?.takeIf { it == this .member }
108- ?.let {
109- val byAnnotation = it.isRequiredByAnnotation()
110- return requiredAnnotationOrNullability(byAnnotation, kProperty.returnType.isRequired())
111- }
112-
113- (kProperty as ? KMutableProperty1 )?.javaSetter
114- ?.takeIf { it == this .member }
115- ?.let {
116- val byAnnotation = it.isRequiredByAnnotation()
117- return requiredAnnotationOrNullability(byAnnotation, kProperty.setter.isMethodParameterRequired(0 ))
118- }
111+ if (kProperty.javaGetter == this .member || (kProperty as ? KMutableProperty1 )?.javaSetter == this .member) {
112+ val byAnnotation = this .member.isRequiredByAnnotation()
113+ val byNullability = kProperty.isRequiredByNullability()
114+ return requiredAnnotationOrNullability(byAnnotation, byNullability)
115+ }
119116 }
120117 return null
121118 }
0 commit comments