1919import java .lang .reflect .ParameterizedType ;
2020import java .lang .reflect .Type ;
2121import java .lang .reflect .TypeVariable ;
22+ import java .util .Arrays ;
2223import java .util .ArrayList ;
2324import java .util .Collection ;
25+ import java .util .Comparator ;
2426import java .util .HashMap ;
2527import java .util .List ;
2628import java .util .Map ;
@@ -39,6 +41,13 @@ interface OverridingConcreteSimple extends Simple {
3941 String get ();
4042 }
4143
44+ public Method [] getMethods (Class <?> c ) {
45+ Method [] methods = c .getMethods ();
46+ Arrays .sort (methods ,
47+ Comparator .comparing (o -> (o .getName () + o .getGenericReturnType ().getTypeName ())));
48+ return methods ;
49+ }
50+
4251 @ Test
4352 public void simple () {
4453 Method [] methods = Simple .class .getMethods ();
@@ -159,7 +168,7 @@ public void concreteSimpleClassGenericSecondLevel() {
159168
160169 @ Test
161170 public void overridingConcreteSimpleClassGenericSecondLevel () {
162- Method [] methods = OverridingConcreteSimpleClassGenericSecondLevel .class . getMethods ( );
171+ Method [] methods = getMethods ( OverridingConcreteSimpleClassGenericSecondLevel .class );
163172 Assertions .assertThat (methods .length ).isEqualTo (2 );
164173 Type resolved = Types .resolve (OverridingConcreteSimpleClassGenericSecondLevel .class ,
165174 OverridingConcreteSimpleClassGenericSecondLevel .class , methods [0 ].getGenericReturnType ());
@@ -221,7 +230,7 @@ public void concreteSimpleClassMultipleGenericSecondLevel() {
221230
222231 @ Test
223232 public void overridingConcreteSimpleClassMultipleGenericSecondLevel () {
224- Method [] methods = OverridingConcreteSimpleClassMultipleGenericSecondLevel .class . getMethods ( );
233+ Method [] methods = getMethods ( OverridingConcreteSimpleClassMultipleGenericSecondLevel .class );
225234 Assertions .assertThat (methods .length ).isEqualTo (2 );
226235 Type resolved =
227236 Types .resolve (OverridingConcreteSimpleClassMultipleGenericSecondLevel .class ,
@@ -255,7 +264,7 @@ public void realizingSimpleClassGenericThirdLevel() {
255264
256265 @ Test
257266 public void realizingSimpleClassMultipleGenericThirdLevel () {
258- Method [] methods = RealizingSimpleClassMultipleGenericThirdLevel .class . getMethods ( );
267+ Method [] methods = getMethods ( RealizingSimpleClassMultipleGenericThirdLevel .class );
259268 Assertions .assertThat (methods .length ).isEqualTo (2 );
260269 Type resolved = Types .resolve (RealizingSimpleClassMultipleGenericThirdLevel .class ,
261270 RealizingSimpleClassMultipleGenericThirdLevel .class , methods [0 ].getGenericReturnType ());
@@ -269,7 +278,7 @@ public void realizingSimpleClassMultipleGenericThirdLevel() {
269278
270279 @ Test
271280 public void realizingOverridingSimpleClassGenericThirdLevel () {
272- Method [] methods = RealizingOverridingSimpleClassGenericThirdLevel .class . getMethods ( );
281+ Method [] methods = getMethods ( RealizingOverridingSimpleClassGenericThirdLevel .class );
273282 Assertions .assertThat (methods .length ).isEqualTo (2 );
274283 Type resolved = Types .resolve (RealizingOverridingSimpleClassGenericThirdLevel .class ,
275284 RealizingOverridingSimpleClassGenericThirdLevel .class , methods [0 ].getGenericReturnType ());
@@ -283,7 +292,7 @@ public void realizingOverridingSimpleClassGenericThirdLevel() {
283292
284293 @ Test
285294 public void realizingOverridingSimpleClassMultipleGenericThirdLevel () {
286- Method [] methods = RealizingOverridingSimpleClassMultipleGenericThirdLevel .class . getMethods ( );
295+ Method [] methods = getMethods ( RealizingOverridingSimpleClassMultipleGenericThirdLevel .class );
287296 Assertions .assertThat (methods .length ).isEqualTo (2 );
288297 Type resolved =
289298 Types .resolve (RealizingOverridingSimpleClassMultipleGenericThirdLevel .class ,
@@ -354,7 +363,7 @@ public void concreteSimpleClassGenericThirdLevel() {
354363
355364 @ Test
356365 public void OverridingConcreteSimpleClassGenericThirdLevel () {
357- Method [] methods = OverridingConcreteSimpleClassGenericThirdLevel .class . getMethods ( );
366+ Method [] methods = getMethods ( OverridingConcreteSimpleClassGenericThirdLevel .class );
358367 Assertions .assertThat (methods .length ).isEqualTo (2 );
359368 Type resolved = Types .resolve (OverridingConcreteSimpleClassGenericThirdLevel .class ,
360369 OverridingConcreteSimpleClassGenericThirdLevel .class , methods [0 ].getGenericReturnType ());
@@ -452,31 +461,31 @@ public void concreteCollectionGenericFourthLevel() {
452461
453462 @ Test
454463 public void overridingConcreteCollectionGenericFourthLevel () {
455- Method [] methods = OverridingConcreteCollectionGenericFourthLevel .class . getMethods ( );
464+ Method [] methods = getMethods ( OverridingConcreteCollectionGenericFourthLevel .class );
456465 Assertions .assertThat (methods .length ).isEqualTo (2 );
457466 Type resolved = Types .resolve (OverridingConcreteCollectionGenericFourthLevel .class ,
458- OverridingConcreteCollectionGenericFourthLevel .class , methods [0 ].getGenericReturnType ());
467+ OverridingConcreteCollectionGenericFourthLevel .class , methods [1 ].getGenericReturnType ());
459468 Assertions .assertThat (resolved instanceof ParameterizedType ).isTrue ();
460469 Type resolved2 = Types .resolve (OverridingConcreteCollectionGenericFourthLevel .class ,
461- OverridingConcreteCollectionGenericFourthLevel .class , methods [1 ].getGenericReturnType ());
470+ OverridingConcreteCollectionGenericFourthLevel .class , methods [0 ].getGenericReturnType ());
462471 Assertions .assertThat (resolved2 ).isEqualTo (Object .class );
463472 Type resolvedType = Types .resolveReturnType (resolved , resolved2 );
464473 Assertions .assertThat (resolvedType ).isEqualTo (resolved );
465474 }
466475
467476 @ Test
468477 public void overrideOverridingConcreteCollectionGenericFourthLevel () {
469- Method [] methods = OverrideOverridingConcreteCollectionGenericFourthLevel .class . getMethods ( );
478+ Method [] methods = getMethods ( OverrideOverridingConcreteCollectionGenericFourthLevel .class );
470479 Assertions .assertThat (methods .length ).isEqualTo (2 );
471480 Type resolved =
472481 Types .resolve (OverrideOverridingConcreteCollectionGenericFourthLevel .class ,
473482 OverrideOverridingConcreteCollectionGenericFourthLevel .class ,
474- methods [0 ].getGenericReturnType ());
483+ methods [1 ].getGenericReturnType ());
475484 Assertions .assertThat (resolved instanceof ParameterizedType ).isTrue ();
476485 Type resolved2 =
477486 Types .resolve (OverrideOverridingConcreteCollectionGenericFourthLevel .class ,
478487 OverrideOverridingConcreteCollectionGenericFourthLevel .class ,
479- methods [1 ].getGenericReturnType ());
488+ methods [0 ].getGenericReturnType ());
480489 Assertions .assertThat (resolved2 ).isEqualTo (Object .class );
481490 Type resolvedType = Types .resolveReturnType (resolved , resolved2 );
482491 Assertions .assertThat (resolvedType ).isEqualTo (resolved );
@@ -505,20 +514,20 @@ public void concreteGenericCollectionGenericFifthLevel() {
505514
506515 @ Test
507516 public void overridingConcreteGenericCollectionGenericFifthLevel () {
508- Method [] methods = OverridingConcreteGenericCollectionGenericFifthLevel .class . getMethods ( );
517+ Method [] methods = getMethods ( OverridingConcreteGenericCollectionGenericFifthLevel .class );
509518 Assertions .assertThat (methods .length ).isEqualTo (2 );
510519 Type resolved =
511520 Types .resolve (OverridingConcreteGenericCollectionGenericFifthLevel .class ,
512521 OverridingConcreteGenericCollectionGenericFifthLevel .class ,
513- methods [0 ].getGenericReturnType ());
522+ methods [1 ].getGenericReturnType ());
514523 Assertions .assertThat (resolved instanceof ParameterizedType ).isTrue ();
515524 Type resolved2 =
516525 Types .resolve (OverridingConcreteGenericCollectionGenericFifthLevel .class ,
517526 OverridingConcreteGenericCollectionGenericFifthLevel .class ,
518- methods [1 ].getGenericReturnType ());
527+ methods [0 ].getGenericReturnType ());
519528 Assertions .assertThat (resolved2 ).isEqualTo (Object .class );
520- Type resolvedType = Types .resolveReturnType (methods [0 ].getGenericReturnType (),
521- methods [1 ].getGenericReturnType ());
529+ Type resolvedType = Types .resolveReturnType (methods [1 ].getGenericReturnType (),
530+ methods [0 ].getGenericReturnType ());
522531 Assertions .assertThat (resolvedType ).isEqualTo (resolved );
523532 }
524533
0 commit comments