Skip to content

Commit 1aaa44b

Browse files
committed
Refine BindingReflectionHintsRegistrar
This commit refines BindingReflectionHintsRegistrar to handle correctly a use case with multiple levels of nested generics. Closes gh-28683
1 parent a04e805 commit 1aaa44b

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

spring-core/src/main/java/org/springframework/aot/hint/support/BindingReflectionHintsRegistrar.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ private void collectReferencedTypes(Set<Type> seen, Set<Class<?>> types, @Nullab
142142
if (type == null || seen.contains(type)) {
143143
return;
144144
}
145-
seen.add(type);
146145
ResolvableType resolvableType = ResolvableType.forType(type);
147146
Class<?> clazz = resolvableType.resolve();
148147
if (clazz != null) {

spring-core/src/test/java/org/springframework/aot/hint/support/BindingReflectionHintsRegistrarTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.lang.reflect.Type;
2020
import java.util.List;
21+
import java.util.Set;
2122

2223
import org.junit.jupiter.api.Test;
2324

@@ -184,6 +185,17 @@ void registerTypeForSerializationWithResolvableType() {
184185
});
185186
}
186187

188+
@Test
189+
void registerTypeForSerializationWithMultipleLevelsAndCollection() {
190+
bindingRegistrar.registerReflectionHints(this.hints.reflection(), SampleClassA.class);
191+
assertThat(this.hints.reflection().typeHints()).satisfiesExactlyInAnyOrder(
192+
typeHint -> assertThat(typeHint.getType()).isEqualTo(TypeReference.of(SampleClassA.class)),
193+
typeHint -> assertThat(typeHint.getType()).isEqualTo(TypeReference.of(SampleClassB.class)),
194+
typeHint -> assertThat(typeHint.getType()).isEqualTo(TypeReference.of(SampleClassC.class)),
195+
typeHint -> assertThat(typeHint.getType()).isEqualTo(TypeReference.of(String.class)),
196+
typeHint -> assertThat(typeHint.getType()).isEqualTo(TypeReference.of(Set.class)));
197+
}
198+
187199

188200
static class SampleEmptyClass {
189201
}
@@ -244,4 +256,22 @@ public ResolvableType getResolvableType() {
244256
}
245257
}
246258

259+
static class SampleClassA {
260+
public Set<SampleClassB> getB() {
261+
return null;
262+
}
263+
}
264+
265+
static class SampleClassB {
266+
public SampleClassC getC() {
267+
return null;
268+
}
269+
}
270+
271+
class SampleClassC {
272+
public String getString() {
273+
return "";
274+
}
275+
}
276+
247277
}

0 commit comments

Comments
 (0)