@@ -342,10 +342,50 @@ public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
342
342
}
343
343
344
344
public boolean matchesFallback (TypeDescriptor sourceType , TypeDescriptor targetType ) {
345
- return (this .typeInfo .getTargetType () == targetType .getObjectType () &&
346
- this .targetType .hasUnresolvableGenerics () &&
347
- (!(this .converter instanceof ConditionalConverter conditionalConverter ) ||
348
- conditionalConverter .matches (sourceType , targetType )));
345
+ if (this .typeInfo .getTargetType () != targetType .getObjectType ()) {
346
+ return false ;
347
+ }
348
+
349
+ if (!this .targetType .hasUnresolvableGenerics ()) {
350
+ return false ;
351
+ }
352
+
353
+ boolean assignable = isAssignableTo (targetType .getResolvableType ());
354
+ if (!assignable ) {
355
+ return false ;
356
+ }
357
+
358
+ return !(this .converter instanceof ConditionalConverter conditionalConverter ) ||
359
+ conditionalConverter .matches (sourceType , targetType );
360
+ }
361
+
362
+ private boolean isAssignableTo (ResolvableType expected ) {
363
+ return isAssignable ( this .targetType , expected );
364
+ }
365
+
366
+ private boolean isAssignable (ResolvableType actual , ResolvableType expected ) {
367
+ Class <?> actualResolved = actual .resolve (Object .class );
368
+ Class <?> expectedResolved = expected .resolve (Object .class );
369
+ if (!expectedResolved .isAssignableFrom (actualResolved )) {
370
+ return false ;
371
+ }
372
+
373
+ ResolvableType [] actualGenerics = actual .getGenerics ();
374
+ ResolvableType [] expectedGenerics = expected .getGenerics ();
375
+
376
+ if (expectedGenerics .length != actualGenerics .length ) {
377
+ return false ;
378
+ }
379
+
380
+ for (int i = 0 ; i < expectedGenerics .length ; i ++) {
381
+ ResolvableType actualGeneric = actualGenerics [i ];
382
+ ResolvableType expectedGeneric = expectedGenerics [i ];
383
+ if (!isAssignable (actualGeneric , expectedGeneric )) {
384
+ return false ;
385
+ }
386
+ }
387
+
388
+ return true ;
349
389
}
350
390
351
391
@ Override
0 commit comments