Skip to content

Commit db9352e

Browse files
committed
optimize getting hasRequiredMarker process on CorrespondingAccessor
1 parent de52ac5 commit db9352e

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

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

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ 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
1716
import kotlin.reflect.KType
1817
import kotlin.reflect.full.createType
1918
import kotlin.reflect.full.declaredMemberProperties
@@ -100,17 +99,7 @@ internal class KotlinAnnotationIntrospector(private val context: Module.SetupCon
10099
private fun AnnotatedMethod.hasRequiredMarker(): Boolean? {
101100
// This could be a setter or a getter of a class property or
102101
// a setter-like/getter-like method.
103-
val paramGetter = this.getCorrespondingGetter()
104-
if (paramGetter != null) {
105-
val byAnnotation = paramGetter.javaGetter?.isRequiredByAnnotation()
106-
return requiredAnnotationOrNullability(byAnnotation, paramGetter.returnType.isRequired())
107-
}
108-
109-
val paramSetter = this.getCorrespondingSetter()
110-
if (paramSetter != null) {
111-
val byAnnotation = paramSetter.javaMethod?.isRequiredByAnnotation()
112-
return requiredAnnotationOrNullability(byAnnotation, paramSetter.isMethodParameterRequired(0))
113-
}
102+
this.getFromCorrespondingAccessor()?.let { return it }
114103

115104
// Is the member method a regular method of the data class or
116105
val method = this.member.kotlinFunction
@@ -132,21 +121,23 @@ internal class KotlinAnnotationIntrospector(private val context: Module.SetupCon
132121
private fun KFunction<*>.isSetterLike(): Boolean =
133122
parameters.size == 2 && returnType == Unit::class.createType()
134123

124+
private fun AnnotatedMethod.getFromCorrespondingAccessor(): Boolean? {
125+
member.declaringClass.kotlin.declaredMemberProperties.forEach { kProperty1 ->
126+
kProperty1.javaGetter
127+
?.takeIf { it == this.member }
128+
?.let {
129+
val byAnnotation = it.isRequiredByAnnotation()
130+
return requiredAnnotationOrNullability(byAnnotation, kProperty1.returnType.isRequired())
131+
}
135132

136-
private fun AnnotatedMethod.getCorrespondingGetter(): KProperty1<out Any, Any?>? =
137-
member.declaringClass.kotlin.declaredMemberProperties.find {
138-
it.getter.javaMethod == this.member
139-
}
140-
141-
@Suppress("UNCHECKED_CAST")
142-
private fun AnnotatedMethod.getCorrespondingSetter(): KMutableProperty1.Setter<out Any, Any?>? {
143-
val mutableProperty = member.declaringClass.kotlin.declaredMemberProperties.find {
144-
when (it) {
145-
is KMutableProperty1 -> it.javaSetter == this.member
146-
else -> false
147-
}
133+
(kProperty1 as? KMutableProperty1)?.javaSetter
134+
?.takeIf { it == this.member }
135+
?.let {
136+
val byAnnotation = it.isRequiredByAnnotation()
137+
return requiredAnnotationOrNullability(byAnnotation, kProperty1.setter.isMethodParameterRequired(0))
138+
}
148139
}
149-
return (mutableProperty as? KMutableProperty1<out Any, Any?>)?.setter
140+
return null
150141
}
151142

152143
private fun AnnotatedParameter.hasRequiredMarker(): Boolean? {

0 commit comments

Comments
 (0)