Refine KotlinDetector#hasSerializableAnnotation

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

Closes gh-35960
This commit is contained in:
Sébastien Deleuze
2025-12-04 15:54:03 +01:00
parent 0a86a7e3a8
commit 8b6d7e0da7
2 changed files with 9 additions and 3 deletions
@@ -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;
}
}
@@ -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()
}