diff --git a/spring-core/src/main/java/org/springframework/core/KotlinDetector.java b/spring-core/src/main/java/org/springframework/core/KotlinDetector.java index 269bb88c256..c7852e8e83b 100644 --- a/spring-core/src/main/java/org/springframework/core/KotlinDetector.java +++ b/spring-core/src/main/java/org/springframework/core/KotlinDetector.java @@ -148,9 +148,8 @@ public abstract class KotlinDetector { if (resolvedClass.isAnnotationPresent(KOTLIN_SERIALIZABLE)) { return true; } - @Nullable Class[] resolvedGenerics = type.resolveGenerics(); - for (Class resolvedGeneric : resolvedGenerics) { - if (resolvedGeneric != null && resolvedGeneric.isAnnotationPresent(KOTLIN_SERIALIZABLE)) { + for (ResolvableType genericType : type.getGenerics()) { + if (hasSerializableAnnotation(genericType)) { return true; } } diff --git a/spring-core/src/test/kotlin/org/springframework/core/KotlinDetectorTests.kt b/spring-core/src/test/kotlin/org/springframework/core/KotlinDetectorTests.kt index c7fdb28b7de..a9048b7c5b8 100644 --- a/spring-core/src/test/kotlin/org/springframework/core/KotlinDetectorTests.kt +++ b/spring-core/src/test/kotlin/org/springframework/core/KotlinDetectorTests.kt @@ -57,6 +57,13 @@ class KotlinDetectorTests { Assertions.assertThat(KotlinDetector.hasSerializableAnnotation(ResolvableType.forClassWithGenerics(Map::class.java, String::class.java, WithoutSerializable::class.java))).isFalse() Assertions.assertThat(KotlinDetector.hasSerializableAnnotation(ResolvableType.forClassWithGenerics(Map::class.java, String::class.java, WithSerializable::class.java))).isTrue() + Assertions.assertThat(KotlinDetector.hasSerializableAnnotation( + ResolvableType.forClassWithGenerics(Map::class.java, + ResolvableType.forClass(String::class.java), + ResolvableType.forClassWithGenerics(List::class.java, WithSerializable::class.java)))).isTrue() + Assertions.assertThat(KotlinDetector.hasSerializableAnnotation( + ResolvableType.forClassWithGenerics(List::class.java, + ResolvableType.forClassWithGenerics(List::class.java, WithSerializable::class.java)))).isTrue() Assertions.assertThat(KotlinDetector.hasSerializableAnnotation(ResolvableType.NONE)).isFalse() }