From ebf3af41124e42a534477b997077a754883b5f63 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 16 May 2021 23:16:41 +0900 Subject: [PATCH] Fix findSubtypes returning wrong values in super edge cases. It's simpler to look at sealedSubclasses directly than to determine isSealed, so I fixed it while I was at it. --- .../kotlin/KotlinAnnotationIntrospector.kt | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinAnnotationIntrospector.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinAnnotationIntrospector.kt index 6132967c..588ed2f0 100644 --- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinAnnotationIntrospector.kt +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinAnnotationIntrospector.kt @@ -63,22 +63,15 @@ internal class KotlinAnnotationIntrospector(private val context: Module.SetupCon * Subclasses can be detected automatically for sealed classes, since all possible subclasses are known * at compile-time to Kotlin. This makes [com.fasterxml.jackson.annotation.JsonSubTypes] redundant. */ - override fun findSubtypes(a: Annotated): MutableList? { - - val rawType = a.rawType - if (rawType.isKotlinClass()) { - val kClass = rawType.kotlin - if (kClass.isSealed) { - return kClass.sealedSubclasses - .map { NamedType(it.java) } - .toMutableList() - } + override fun findSubtypes(a: Annotated): MutableList? = a.rawType + .takeIf { it.isKotlinClass() } + ?.let { rawType -> + rawType.kotlin.sealedSubclasses + .map { NamedType(it.java) } + .toMutableList() + .ifEmpty { null } } - return null - - } - private fun AnnotatedField.hasRequiredMarker(): Boolean? { val byAnnotation = (member as Field).isRequiredByAnnotation() val byNullability = (member as Field).kotlinProperty?.returnType?.isRequired()