diff --git a/spring-core/src/main/java/org/springframework/aot/hint/ReflectionTypeReference.java b/spring-core/src/main/java/org/springframework/aot/hint/ReflectionTypeReference.java index 14a859b991..ddd84aa620 100644 --- a/spring-core/src/main/java/org/springframework/aot/hint/ReflectionTypeReference.java +++ b/spring-core/src/main/java/org/springframework/aot/hint/ReflectionTypeReference.java @@ -28,13 +28,16 @@ final class ReflectionTypeReference extends AbstractTypeReference { private final Class type; private ReflectionTypeReference(Class type) { - super(type.getPackageName(), type.getSimpleName(), safeCreate(type.getEnclosingClass())); + super(type.getPackageName(), type.getSimpleName(), getEnclosingClass(type)); this.type = type; } @Nullable - private static ReflectionTypeReference safeCreate(@Nullable Class type) { - return (type != null ? new ReflectionTypeReference(type) : null); + private static TypeReference getEnclosingClass(Class type) { + Class candidate = (type.isArray() + ? type.getComponentType().getEnclosingClass() + : type.getEnclosingClass()); + return (candidate != null ? new ReflectionTypeReference(candidate) : null); } static ReflectionTypeReference of(Class type) { diff --git a/spring-core/src/test/java/org/springframework/aot/hint/ReflectionTypeReferenceTests.java b/spring-core/src/test/java/org/springframework/aot/hint/ReflectionTypeReferenceTests.java index f351f6af23..e36883cea2 100644 --- a/spring-core/src/test/java/org/springframework/aot/hint/ReflectionTypeReferenceTests.java +++ b/spring-core/src/test/java/org/springframework/aot/hint/ReflectionTypeReferenceTests.java @@ -28,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link ReflectionTypeReference}. * * @author Stephane Nicoll + * @author Moritz Halbritter */ class ReflectionTypeReferenceTests { @@ -38,10 +39,26 @@ class ReflectionTypeReferenceTests { } static Stream reflectionTargetNames() { - return Stream.of(Arguments.of(ReflectionTypeReference.of(int.class), "int"), + return Stream.of( + Arguments.of(ReflectionTypeReference.of(int.class), "int"), Arguments.of(ReflectionTypeReference.of(int[].class), "int[]"), Arguments.of(ReflectionTypeReference.of(Integer[].class), "java.lang.Integer[]"), - Arguments.of(ReflectionTypeReference.of(Object[].class), "java.lang.Object[]")); + Arguments.of(ReflectionTypeReference.of(Object[].class), "java.lang.Object[]"), + Arguments.of(ReflectionTypeReference.of(StaticInner.class), + "org.springframework.aot.hint.ReflectionTypeReferenceTests$StaticInner"), + Arguments.of(ReflectionTypeReference.of(StaticInner[].class), + "org.springframework.aot.hint.ReflectionTypeReferenceTests$StaticInner[]"), + Arguments.of(ReflectionTypeReference.of(Inner.class), + "org.springframework.aot.hint.ReflectionTypeReferenceTests$Inner"), + Arguments.of(ReflectionTypeReference.of(Inner[].class), + "org.springframework.aot.hint.ReflectionTypeReferenceTests$Inner[]") + ); + } + + static class StaticInner { + } + + class Inner { } }