@@ -430,7 +430,8 @@ public ResolvableType as(Class<?> type) {
430
430
if (this == NONE ) {
431
431
return NONE ;
432
432
}
433
- if (ObjectUtils .nullSafeEquals (resolve (), type )) {
433
+ Class <?> resolved = resolve ();
434
+ if (resolved == null || resolved == type ) {
434
435
return this ;
435
436
}
436
437
for (ResolvableType interfaceType : getInterfaces ()) {
@@ -445,6 +446,7 @@ public ResolvableType as(Class<?> type) {
445
446
/**
446
447
* Return a {@link ResolvableType} representing the direct supertype of this type.
447
448
* If no supertype is available this method returns {@link #NONE}.
449
+ * <p>Note: The resulting {@link ResolvableType} instance may not be {@link Serializable}.
448
450
* @see #getInterfaces()
449
451
*/
450
452
public ResolvableType getSuperType () {
@@ -454,7 +456,7 @@ public ResolvableType getSuperType() {
454
456
}
455
457
ResolvableType superType = this .superType ;
456
458
if (superType == null ) {
457
- superType = forType (SerializableTypeWrapper . forGenericSuperclass ( resolved ), asVariableResolver () );
459
+ superType = forType (resolved . getGenericSuperclass ( ), this );
458
460
this .superType = superType ;
459
461
}
460
462
return superType ;
@@ -464,16 +466,21 @@ public ResolvableType getSuperType() {
464
466
* Return a {@link ResolvableType} array representing the direct interfaces
465
467
* implemented by this type. If this type does not implement any interfaces an
466
468
* empty array is returned.
469
+ * <p>Note: The resulting {@link ResolvableType} instances may not be {@link Serializable}.
467
470
* @see #getSuperType()
468
471
*/
469
472
public ResolvableType [] getInterfaces () {
470
473
Class <?> resolved = resolve ();
471
- if (resolved == null || ObjectUtils . isEmpty ( resolved . getGenericInterfaces ()) ) {
474
+ if (resolved == null ) {
472
475
return EMPTY_TYPES_ARRAY ;
473
476
}
474
477
ResolvableType [] interfaces = this .interfaces ;
475
478
if (interfaces == null ) {
476
- interfaces = forTypes (SerializableTypeWrapper .forGenericInterfaces (resolved ), asVariableResolver ());
479
+ Type [] genericIfcs = resolved .getGenericInterfaces ();
480
+ interfaces = new ResolvableType [genericIfcs .length ];
481
+ for (int i = 0 ; i < genericIfcs .length ; i ++) {
482
+ interfaces [i ] = forType (genericIfcs [i ], this );
483
+ }
477
484
this .interfaces = interfaces ;
478
485
}
479
486
return interfaces ;
@@ -673,8 +680,11 @@ public ResolvableType[] getGenerics() {
673
680
ResolvableType [] generics = this .generics ;
674
681
if (generics == null ) {
675
682
if (this .type instanceof Class ) {
676
- Class <?> typeClass = (Class <?>) this .type ;
677
- generics = forTypes (SerializableTypeWrapper .forTypeParameters (typeClass ), this .variableResolver );
683
+ Type [] typeParams = ((Class <?>) this .type ).getTypeParameters ();
684
+ generics = new ResolvableType [typeParams .length ];
685
+ for (int i = 0 ; i < generics .length ; i ++) {
686
+ generics [i ] = ResolvableType .forType (typeParams [i ], this );
687
+ }
678
688
}
679
689
else if (this .type instanceof ParameterizedType ) {
680
690
Type [] actualTypeArguments = ((ParameterizedType ) this .type ).getActualTypeArguments ();
@@ -818,7 +828,7 @@ ResolvableType resolveType() {
818
828
819
829
@ Nullable
820
830
private Type resolveBounds (Type [] bounds ) {
821
- if (ObjectUtils . isEmpty ( bounds ) || Object . class == bounds [0 ]) {
831
+ if (bounds . length == 0 || bounds [0 ] == Object . class ) {
822
832
return null ;
823
833
}
824
834
return bounds [0 ];
@@ -1309,17 +1319,9 @@ public static ResolvableType forArrayComponent(ResolvableType componentType) {
1309
1319
return new ResolvableType (arrayClass , null , null , componentType );
1310
1320
}
1311
1321
1312
- private static ResolvableType [] forTypes (Type [] types , @ Nullable VariableResolver owner ) {
1313
- ResolvableType [] result = new ResolvableType [types .length ];
1314
- for (int i = 0 ; i < types .length ; i ++) {
1315
- result [i ] = forType (types [i ], owner );
1316
- }
1317
- return result ;
1318
- }
1319
-
1320
1322
/**
1321
1323
* Return a {@link ResolvableType} for the specified {@link Type}.
1322
- * Note: The resulting {@link ResolvableType} may not be {@link Serializable}.
1324
+ * <p> Note: The resulting {@link ResolvableType} instance may not be {@link Serializable}.
1323
1325
* @param type the source type (potentially {@code null})
1324
1326
* @return a {@link ResolvableType} for the specified {@link Type}
1325
1327
* @see #forType(Type, ResolvableType)
@@ -1330,7 +1332,8 @@ public static ResolvableType forType(@Nullable Type type) {
1330
1332
1331
1333
/**
1332
1334
* Return a {@link ResolvableType} for the specified {@link Type} backed by the given
1333
- * owner type. Note: The resulting {@link ResolvableType} may not be {@link Serializable}.
1335
+ * owner type.
1336
+ * <p>Note: The resulting {@link ResolvableType} instance may not be {@link Serializable}.
1334
1337
* @param type the source type or {@code null}
1335
1338
* @param owner the owner type used to resolve variables
1336
1339
* @return a {@link ResolvableType} for the specified {@link Type} and owner
@@ -1347,7 +1350,7 @@ public static ResolvableType forType(@Nullable Type type, @Nullable ResolvableTy
1347
1350
1348
1351
/**
1349
1352
* Return a {@link ResolvableType} for the specified {@link ParameterizedTypeReference}.
1350
- * Note: The resulting {@link ResolvableType} may not be {@link Serializable}.
1353
+ * <p> Note: The resulting {@link ResolvableType} instance may not be {@link Serializable}.
1351
1354
* @param typeReference the reference to obtain the source type from
1352
1355
* @return a {@link ResolvableType} for the specified {@link ParameterizedTypeReference}
1353
1356
* @since 4.3.12
0 commit comments