Polish "Fix enclosing class in TypeReference for inner type arrays"

See gh-28664
This commit is contained in:
Stephane Nicoll
2022-06-20 15:57:33 +02:00
parent c34de54d8a
commit 08f4b7a0f1
2 changed files with 14 additions and 15 deletions

View File

@@ -28,21 +28,16 @@ final class ReflectionTypeReference extends AbstractTypeReference {
private final Class<?> type;
private ReflectionTypeReference(Class<?> type) {
super(type.getPackageName(), type.getSimpleName(), safeCreate(getEnclosingClass(type)));
super(type.getPackageName(), type.getSimpleName(), getEnclosingClass(type));
this.type = type;
}
@Nullable
private static Class<?> getEnclosingClass(Class<?> type) {
if (type.isArray()) {
return type.getComponentType().getEnclosingClass();
}
return type.getEnclosingClass();
}
@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) {

View File

@@ -44,10 +44,14 @@ class ReflectionTypeReferenceTests {
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(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[]")
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[]")
);
}