Skip to content

Commit ce39317

Browse files
committed
Merge pull request #28664 from mhalbritter
* pr/28664: Polish "Fix enclosing class in TypeReference for inner type arrays" Fix enclosing class in TypeReference for inner type arrays Closes gh-28664
2 parents 4cb9e65 + 08f4b7a commit ce39317

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,16 @@ 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(), getEnclosingClass(type));
3232
this.type = type;
3333
}
3434

3535
@Nullable
36-
private static ReflectionTypeReference safeCreate(@Nullable Class<?> type) {
37-
return (type != null ? new ReflectionTypeReference(type) : null);
36+
private static TypeReference getEnclosingClass(Class<?> type) {
37+
Class<?> candidate = (type.isArray()
38+
? type.getComponentType().getEnclosingClass()
39+
: type.getEnclosingClass());
40+
return (candidate != null ? new ReflectionTypeReference(candidate) : null);
3841
}
3942

4043
static ReflectionTypeReference of(Class<?> type) {

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

Lines changed: 19 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,26 @@ 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),
48+
"org.springframework.aot.hint.ReflectionTypeReferenceTests$StaticInner"),
49+
Arguments.of(ReflectionTypeReference.of(StaticInner[].class),
50+
"org.springframework.aot.hint.ReflectionTypeReferenceTests$StaticInner[]"),
51+
Arguments.of(ReflectionTypeReference.of(Inner.class),
52+
"org.springframework.aot.hint.ReflectionTypeReferenceTests$Inner"),
53+
Arguments.of(ReflectionTypeReference.of(Inner[].class),
54+
"org.springframework.aot.hint.ReflectionTypeReferenceTests$Inner[]")
55+
);
56+
}
57+
58+
static class StaticInner {
59+
}
60+
61+
class Inner {
4562
}
4663

4764
}

0 commit comments

Comments
 (0)