@@ -13,6 +13,7 @@ import java.lang.reflect.Field
13
13
import java.lang.reflect.Method
14
14
import kotlin.reflect.KFunction
15
15
import kotlin.reflect.KMutableProperty1
16
+ import kotlin.reflect.KProperty1
16
17
import kotlin.reflect.KType
17
18
import kotlin.reflect.full.createType
18
19
import kotlin.reflect.full.declaredMemberProperties
@@ -96,26 +97,22 @@ internal class KotlinAnnotationIntrospector(private val context: Module.SetupCon
96
97
return (this .annotations.firstOrNull { it.annotationClass.java == JsonProperty ::class .java } as ? JsonProperty )?.required
97
98
}
98
99
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
+
99
104
// This could be a setter or a getter of a class property or
100
105
// a setter-like/getter-like method.
101
106
private fun AnnotatedMethod.hasRequiredMarker (): Boolean? = this .getRequiredMarkerFromCorrespondingAccessor()
102
107
? : this .member.getRequiredMarkerFromAccessorLikeMethod()
103
108
104
109
private fun AnnotatedMethod.getRequiredMarkerFromCorrespondingAccessor (): Boolean? {
105
110
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
+ }
119
116
}
120
117
return null
121
118
}
0 commit comments