Skip to content

Commit c34de54

Browse files
mhalbrittersnicoll
authored andcommitted
Fix enclosing class in TypeReference for inner type arrays
See gh-28664
1 parent 4cb9e65 commit c34de54

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,18 @@ final class ReflectionTypeReference extends AbstractTypeReference {
2828
private final Class<?> type;
2929

3030
private ReflectionTypeReference(Class<?> type) {
31-
super(type.getPackageName(), type.getSimpleName(), safeCreate(type.getEnclosingClass()));
31+
super(type.getPackageName(), type.getSimpleName(), safeCreate(getEnclosingClass(type)));
3232
this.type = type;
3333
}
3434

35+
@Nullable
36+
private static Class<?> getEnclosingClass(Class<?> type) {
37+
if (type.isArray()) {
38+
return type.getComponentType().getEnclosingClass();
39+
}
40+
return type.getEnclosingClass();
41+
}
42+
3543
@Nullable
3644
private static ReflectionTypeReference safeCreate(@Nullable Class<?> type) {
3745
return (type != null ? new ReflectionTypeReference(type) : null);

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
* Tests for {@link ReflectionTypeReference}.
2929
*
3030
* @author Stephane Nicoll
31+
* @author Moritz Halbritter
3132
*/
3233
class ReflectionTypeReferenceTests {
3334

@@ -38,10 +39,22 @@ void typeReferenceFromClasHasSuitableReflectionTargetName(TypeReference typeRefe
3839
}
3940

4041
static Stream<Arguments> reflectionTargetNames() {
41-
return Stream.of(Arguments.of(ReflectionTypeReference.of(int.class), "int"),
42+
return Stream.of(
43+
Arguments.of(ReflectionTypeReference.of(int.class), "int"),
4244
Arguments.of(ReflectionTypeReference.of(int[].class), "int[]"),
4345
Arguments.of(ReflectionTypeReference.of(Integer[].class), "java.lang.Integer[]"),
44-
Arguments.of(ReflectionTypeReference.of(Object[].class), "java.lang.Object[]"));
46+
Arguments.of(ReflectionTypeReference.of(Object[].class), "java.lang.Object[]"),
47+
Arguments.of(ReflectionTypeReference.of(StaticInner.class), "org.springframework.aot.hint.ReflectionTypeReferenceTests$StaticInner"),
48+
Arguments.of(ReflectionTypeReference.of(StaticInner[].class), "org.springframework.aot.hint.ReflectionTypeReferenceTests$StaticInner[]"),
49+
Arguments.of(ReflectionTypeReference.of(Inner.class), "org.springframework.aot.hint.ReflectionTypeReferenceTests$Inner"),
50+
Arguments.of(ReflectionTypeReference.of(Inner[].class), "org.springframework.aot.hint.ReflectionTypeReferenceTests$Inner[]")
51+
);
52+
}
53+
54+
static class StaticInner {
55+
}
56+
57+
class Inner {
4558
}
4659

4760
}

0 commit comments

Comments
 (0)