Skip to content

Commit 8054fda

Browse files
committed
simplification
1 parent 7cad550 commit 8054fda

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

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

+10-13
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import java.lang.reflect.Field
1313
import java.lang.reflect.Method
1414
import kotlin.reflect.KFunction
1515
import kotlin.reflect.KMutableProperty1
16+
import kotlin.reflect.KProperty1
1617
import kotlin.reflect.KType
1718
import kotlin.reflect.full.createType
1819
import 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

Comments
 (0)