|
18 | 18 | import static org.junit.jupiter.api.Assertions.assertEquals; |
19 | 19 | import static org.junit.jupiter.api.Assertions.assertTrue; |
20 | 20 |
|
| 21 | +import java.io.Serializable; |
21 | 22 | import java.lang.reflect.Field; |
22 | 23 | import java.lang.reflect.GenericArrayType; |
23 | 24 | import java.lang.reflect.Method; |
@@ -568,7 +569,48 @@ public Entry<String, Integer> entry() { |
568 | 569 | Method method = clazz.getMethod("selectEntry"); |
569 | 570 | Type typeMybatis = TypeParameterResolver.resolveReturnType(method, clazz); |
570 | 571 |
|
571 | | - assertEquals(typeMybatis, typeJdk); |
| 572 | + assertTrue(typeJdk instanceof ParameterizedType && !(typeJdk instanceof TypeParameterResolver.ParameterizedTypeImpl)); |
| 573 | + assertTrue(typeMybatis instanceof TypeParameterResolver.ParameterizedTypeImpl); |
| 574 | + assertEquals(typeMybatis.equals(typeJdk), typeJdk.equals(typeMybatis)); |
| 575 | + } |
| 576 | + |
| 577 | + @Test |
| 578 | + void shouldWildcardTypeBeEqual() throws Exception { |
| 579 | + class WildcardTypeTester { |
| 580 | + public List<? extends Serializable> foo() { |
| 581 | + return null; |
| 582 | + } |
| 583 | + } |
| 584 | + |
| 585 | + Class<?> clazz = WildcardTypeTester.class; |
| 586 | + Method foo = clazz.getMethod("foo"); |
| 587 | + Type typeMybatis = TypeParameterResolver.resolveReturnType(foo, clazz); |
| 588 | + Type typeJdk = foo.getGenericReturnType(); |
| 589 | + |
| 590 | + Type wildcardMybatis = ((ParameterizedType) typeMybatis).getActualTypeArguments()[0]; |
| 591 | + Type wildcardJdk = ((ParameterizedType) typeJdk).getActualTypeArguments()[0]; |
| 592 | + |
| 593 | + assertTrue(wildcardJdk instanceof WildcardType && !(wildcardJdk instanceof TypeParameterResolver.WildcardTypeImpl)); |
| 594 | + assertTrue(wildcardMybatis instanceof TypeParameterResolver.WildcardTypeImpl); |
| 595 | + assertEquals(wildcardMybatis.equals(wildcardJdk), wildcardJdk.equals(wildcardMybatis)); |
| 596 | + } |
| 597 | + |
| 598 | + @Test |
| 599 | + void shouldGenericArrayTypeBeEqual() throws Exception { |
| 600 | + class GenericArrayTypeTester { |
| 601 | + public List<String>[] foo() { |
| 602 | + return null; |
| 603 | + } |
| 604 | + } |
| 605 | + |
| 606 | + Class<?> clazz = GenericArrayTypeTester.class; |
| 607 | + Method foo = clazz.getMethod("foo"); |
| 608 | + Type typeMybatis = TypeParameterResolver.resolveReturnType(foo, clazz); |
| 609 | + Type typeJdk = foo.getGenericReturnType(); |
| 610 | + |
| 611 | + assertTrue(typeJdk instanceof GenericArrayType && !(typeJdk instanceof TypeParameterResolver.GenericArrayTypeImpl)); |
| 612 | + assertTrue(typeMybatis instanceof TypeParameterResolver.GenericArrayTypeImpl); |
| 613 | + assertEquals(typeMybatis.equals(typeJdk), typeJdk.equals(typeMybatis)); |
572 | 614 | } |
573 | 615 |
|
574 | 616 | @Test |
|
0 commit comments