11/* 
2-  * Copyright 2002-2024  the original author or authors. 
2+  * Copyright 2002-2025  the original author or authors. 
33 * 
44 * Licensed under the Apache License, Version 2.0 (the "License"); 
55 * you may not use this file except in compliance with the License. 
@@ -1189,10 +1189,11 @@ void isAssignableFromForComplexWildcards() throws Exception {
11891189	}
11901190
11911191	@ Test 
1192- 	void  isAssignableFromForUnresolvedWildcards () {
1192+ 	void  isAssignableFromForUnresolvedWildcard () {
11931193		ResolvableType  wildcard  = ResolvableType .forInstance (new  Wildcard <>());
11941194		ResolvableType  wildcardFixed  = ResolvableType .forInstance (new  WildcardFixed ());
1195- 		ResolvableType  wildcardConcrete  = ResolvableType .forClassWithGenerics (Wildcard .class , Number .class );
1195+ 		ResolvableType  wildcardConcrete  = ResolvableType .forClassWithGenerics (Wildcard .class , CharSequence .class );
1196+ 		ResolvableType  wildcardConsumer  = ResolvableType .forInstance (new  WildcardConsumer <>());
11961197
11971198		assertThat (wildcard .isAssignableFrom (wildcardFixed )).isTrue ();
11981199		assertThat (wildcard .isAssignableFromResolvedPart (wildcardFixed )).isTrue ();
@@ -1206,6 +1207,38 @@ void isAssignableFromForUnresolvedWildcards() {
12061207		assertThat (wildcardConcrete .isAssignableFromResolvedPart (wildcard )).isTrue ();
12071208		assertThat (wildcardConcrete .isAssignableFrom (wildcardFixed )).isFalse ();
12081209		assertThat (wildcardConcrete .isAssignableFromResolvedPart (wildcardFixed )).isFalse ();
1210+ 		assertThat (wildcardConsumer .as (Consumer .class ).getGeneric ().isAssignableFrom (wildcard )).isFalse ();
1211+ 		assertThat (wildcardConsumer .as (Consumer .class ).getGeneric ().isAssignableFromResolvedPart (wildcard )).isTrue ();
1212+ 	}
1213+ 
1214+ 	@ Test 
1215+ 	void  isAssignableFromForUnresolvedDoubleWildcard () {
1216+ 		ResolvableType  wildcard  = ResolvableType .forInstance (new  DoubleWildcard <>());
1217+ 		ResolvableType  wildcardFixed  = ResolvableType .forInstance (new  DoubleWildcardFixed ());
1218+ 		ResolvableType  wildcardConsumer  = ResolvableType .forInstance (new  DoubleWildcardConsumer <>());
1219+ 
1220+ 		assertThat (wildcard .isAssignableFrom (wildcardFixed )).isTrue ();
1221+ 		assertThat (wildcard .isAssignableFromResolvedPart (wildcardFixed )).isTrue ();
1222+ 		assertThat (wildcardFixed .isAssignableFrom (wildcard )).isFalse ();
1223+ 		assertThat (wildcardFixed .isAssignableFromResolvedPart (wildcard )).isFalse ();
1224+ 		assertThat (wildcardConsumer .as (Consumer .class ).getGeneric ().isAssignableFrom (wildcard )).isTrue ();
1225+ 		assertThat (wildcardConsumer .as (Consumer .class ).getGeneric ().isAssignableFromResolvedPart (wildcard )).isTrue ();
1226+ 	}
1227+ 
1228+ 	@ Test 
1229+ 	void  strictGenericsMatching () {
1230+ 		ResolvableType  consumerUnresolved  = ResolvableType .forClass (Consumer .class );
1231+ 		ResolvableType  consumerObject  = ResolvableType .forClassWithGenerics (Consumer .class , Object .class );
1232+ 		ResolvableType  consumerNestedUnresolved  = ResolvableType .forClassWithGenerics (Consumer .class , ResolvableType .forClass (Consumer .class ));
1233+ 
1234+ 		assertThat (consumerUnresolved .isAssignableFrom (consumerObject )).isTrue ();
1235+ 		assertThat (consumerUnresolved .isAssignableFromResolvedPart (consumerObject )).isTrue ();
1236+ 		assertThat (consumerObject .isAssignableFrom (consumerUnresolved )).isTrue ();
1237+ 		assertThat (consumerObject .isAssignableFromResolvedPart (consumerUnresolved )).isTrue ();
1238+ 		assertThat (consumerUnresolved .isAssignableFrom (consumerNestedUnresolved )).isTrue ();
1239+ 		assertThat (consumerUnresolved .isAssignableFromResolvedPart (consumerNestedUnresolved )).isTrue ();
1240+ 		assertThat (consumerObject .isAssignableFrom (consumerNestedUnresolved )).isFalse ();
1241+ 		assertThat (consumerObject .isAssignableFromResolvedPart (consumerNestedUnresolved )).isFalse ();
12091242	}
12101243
12111244	@ Test 
@@ -1752,12 +1785,26 @@ public class MyCollectionSuperclassType extends MySuperclassType<Collection<Stri
17521785	}
17531786
17541787
1755- 	public  class  Wildcard <T  extends  Number > {
1788+ 	public  class  Wildcard <T  extends  CharSequence > {
1789+ 	}
1790+ 
1791+ 	public  class  WildcardFixed  extends  Wildcard <String > {
1792+ 	}
1793+ 
1794+ 	public  class  WildcardConsumer <T  extends  CharSequence  & Serializable > implements  Consumer <Wildcard <T >> {
17561795	}
17571796
1758- 	public  class  WildcardFixed  extends  Wildcard <Integer > {
1797+ 
1798+ 	public  class  DoubleWildcard <T  extends  CharSequence  & Serializable > {
17591799	}
17601800
1801+ 	public  class  DoubleWildcardFixed  extends  DoubleWildcard <String > {
1802+ 	}
1803+ 
1804+ 	public  class  DoubleWildcardConsumer <T  extends  CharSequence  & Serializable > implements  Consumer <DoubleWildcard <T >> {
1805+ 	}
1806+ 
1807+ 
17611808
17621809	interface  VariableNameSwitch <V , K > extends  MultiValueMap <K , V > {
17631810	}
0 commit comments