Browse Source

Refine KotlinDetector#hasSerializableAnnotation

Refine KotlinDetector#hasSerializableAnnotation in order to detect
deeply nested generic types.

Closes gh-35960
pull/35968/head
Sébastien Deleuze 2 weeks ago
parent
commit
8b6d7e0da7
  1. 5
      spring-core/src/main/java/org/springframework/core/KotlinDetector.java
  2. 7
      spring-core/src/test/kotlin/org/springframework/core/KotlinDetectorTests.kt

5
spring-core/src/main/java/org/springframework/core/KotlinDetector.java

@ -148,9 +148,8 @@ public abstract class KotlinDetector { @@ -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;
}
}

7
spring-core/src/test/kotlin/org/springframework/core/KotlinDetectorTests.kt

@ -57,6 +57,13 @@ class KotlinDetectorTests { @@ -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()
}

Loading…
Cancel
Save