Skip to content

Commit f88c314

Browse files
kilinksdeleuze
authored andcommitted
Avoid empty array allocations in ResolvableType
Avoid allocating empty arrays in a few places in ResolvableType. Closes gh-33473
1 parent daba9e5 commit f88c314

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

spring-core/src/main/java/org/springframework/core/ResolvableType.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -549,9 +549,14 @@ public ResolvableType[] getInterfaces() {
549549
ResolvableType[] interfaces = this.interfaces;
550550
if (interfaces == null) {
551551
Type[] genericIfcs = resolved.getGenericInterfaces();
552-
interfaces = new ResolvableType[genericIfcs.length];
553-
for (int i = 0; i < genericIfcs.length; i++) {
554-
interfaces[i] = forType(genericIfcs[i], this);
552+
if (genericIfcs.length > 0) {
553+
interfaces = new ResolvableType[genericIfcs.length];
554+
for (int i = 0; i < genericIfcs.length; i++) {
555+
interfaces[i] = forType(genericIfcs[i], this);
556+
}
557+
}
558+
else {
559+
interfaces = EMPTY_TYPES_ARRAY;
555560
}
556561
this.interfaces = interfaces;
557562
}
@@ -789,16 +794,26 @@ public ResolvableType[] getGenerics() {
789794
if (generics == null) {
790795
if (this.type instanceof Class<?> clazz) {
791796
Type[] typeParams = clazz.getTypeParameters();
792-
generics = new ResolvableType[typeParams.length];
793-
for (int i = 0; i < generics.length; i++) {
794-
generics[i] = ResolvableType.forType(typeParams[i], this);
797+
if (typeParams.length > 0) {
798+
generics = new ResolvableType[typeParams.length];
799+
for (int i = 0; i < generics.length; i++) {
800+
generics[i] = ResolvableType.forType(typeParams[i], this);
801+
}
802+
}
803+
else {
804+
generics = EMPTY_TYPES_ARRAY;
795805
}
796806
}
797807
else if (this.type instanceof ParameterizedType parameterizedType) {
798808
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
799-
generics = new ResolvableType[actualTypeArguments.length];
800-
for (int i = 0; i < actualTypeArguments.length; i++) {
801-
generics[i] = forType(actualTypeArguments[i], this.variableResolver);
809+
if (actualTypeArguments.length > 0) {
810+
generics = new ResolvableType[actualTypeArguments.length];
811+
for (int i = 0; i < actualTypeArguments.length; i++) {
812+
generics[i] = forType(actualTypeArguments[i], this.variableResolver);
813+
}
814+
}
815+
else {
816+
generics = EMPTY_TYPES_ARRAY;
802817
}
803818
}
804819
else {

0 commit comments

Comments
 (0)