@@ -510,6 +510,31 @@ public void testIsAssignableClassToNull() {
510510 Types .isAssignable (Object .class , null );
511511 }
512512
513+ /** Tests {@link Types#isAssignable(Type, Type)} with type variable. */
514+ @ Test
515+ public <T extends Number > void testIsAssignableT () {
516+ final Type t = genericTestType ("t" );
517+ final Type listT = genericTestType ("listT" );
518+ final Type listNumber = genericTestType ("listNumber" );
519+ final Type listInteger = genericTestType ("listInteger" );
520+ final Type listExtendsNumber = genericTestType ("listExtendsNumber" );
521+
522+ assertTrue (Types .isAssignable (t , t ));
523+ assertTrue (Types .isAssignable (listT , listT ));
524+ assertTrue (Types .isAssignable (listNumber , listNumber ));
525+ assertTrue (Types .isAssignable (listInteger , listInteger ));
526+ assertTrue (Types .isAssignable (listExtendsNumber , listExtendsNumber ));
527+
528+ assertTrue (Types .isAssignable (listT , listExtendsNumber ));
529+ assertTrue (Types .isAssignable (listNumber , listExtendsNumber ));
530+ assertTrue (Types .isAssignable (listInteger , listExtendsNumber ));
531+
532+ assertFalse (Types .isAssignable (listNumber , listT ));
533+ assertFalse (Types .isAssignable (listInteger , listT ));
534+ assertFalse (Types .isAssignable (listExtendsNumber , listT ));
535+ assertFalse (Types .isAssignable (listExtendsNumber , listNumber ));
536+ }
537+
513538 /** Tests {@link Types#isInstance(Object, Class)}. */
514539 @ Test
515540 public void testIsInstance () {
@@ -598,6 +623,14 @@ public static enum Words {
598623 FOO , BAR , FUBAR
599624 }
600625
626+ private interface TestTypes <T extends Number > {
627+ T t ();
628+ List <T > listT ();
629+ List <Number > listNumber ();
630+ List <Integer > listInteger ();
631+ List <? extends Number > listExtendsNumber ();
632+ }
633+
601634 // -- Helper methods --
602635
603636 /**
@@ -671,4 +704,7 @@ private void assertAllTheSame(final List<?> list, final Object... values) {
671704 }
672705 }
673706
707+ private Type genericTestType (final String name ) {
708+ return Types .method (TestTypes .class , name ).getGenericReturnType ();
709+ }
674710}
0 commit comments