Revise ResolvableType equality
ResolvableTypes are only considered equal if of the very same class now. As a consequence, a forRawClass result is not equal to forClass anymore. The new equalsType method is available for plain type equality checks. Closes gh-28608 Closes gh-27748
This commit is contained in:
@@ -123,6 +123,7 @@ class ResolvableTypeTests {
|
||||
assertThat(type.getRawClass()).isEqualTo(ExtendsList.class);
|
||||
assertThat(type.isAssignableFrom(ExtendsList.class)).isTrue();
|
||||
assertThat(type.isAssignableFrom(ArrayList.class)).isFalse();
|
||||
assertThat(type).isNotEqualTo(ResolvableType.forClass(ExtendsList.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -132,6 +133,7 @@ class ResolvableTypeTests {
|
||||
assertThat(type.getRawClass()).isEqualTo(Object.class);
|
||||
assertThat(type.isAssignableFrom(Object.class)).isTrue();
|
||||
assertThat(type.isAssignableFrom(String.class)).isTrue();
|
||||
assertThat(type).isNotEqualTo(ResolvableType.forClass(null));
|
||||
}
|
||||
|
||||
@Test // gh-23321
|
||||
@@ -200,8 +202,8 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void forFieldMustNotBeNull() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forField(null))
|
||||
.withMessage("Field must not be null");
|
||||
.isThrownBy(() -> ResolvableType.forField(null))
|
||||
.withMessage("Field must not be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -214,8 +216,8 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void forConstructorParameterMustNotBeNull() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forConstructorParameter(null, 0))
|
||||
.withMessage("Constructor must not be null");
|
||||
.isThrownBy(() -> ResolvableType.forConstructorParameter(null, 0))
|
||||
.withMessage("Constructor must not be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -228,8 +230,8 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void forMethodParameterByIndexMustNotBeNull() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forMethodParameter(null, 0))
|
||||
.withMessage("Method must not be null");
|
||||
.isThrownBy(() -> ResolvableType.forMethodParameter(null, 0))
|
||||
.withMessage("Method must not be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -268,8 +270,8 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void forMethodParameterMustNotBeNull() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forMethodParameter(null))
|
||||
.withMessage("MethodParameter must not be null");
|
||||
.isThrownBy(() -> ResolvableType.forMethodParameter(null))
|
||||
.withMessage("MethodParameter must not be null");
|
||||
}
|
||||
|
||||
@Test // SPR-16210
|
||||
@@ -295,8 +297,23 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void forMethodReturnMustNotBeNull() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forMethodReturnType(null))
|
||||
.withMessage("Method must not be null");
|
||||
.isThrownBy(() -> ResolvableType.forMethodReturnType(null))
|
||||
.withMessage("Method must not be null");
|
||||
}
|
||||
|
||||
@Test // gh-27748
|
||||
void genericMatchesReturnType() throws Exception {
|
||||
Method method = SomeRepository.class.getMethod("someMethod", Class.class, Class.class, Class.class);
|
||||
|
||||
ResolvableType returnType = ResolvableType.forMethodReturnType(method, SomeRepository.class);
|
||||
|
||||
ResolvableType arg0 = ResolvableType.forMethodParameter(method, 0, SomeRepository.class); // generic[0]=T
|
||||
ResolvableType arg1 = ResolvableType.forMethodParameter(method, 1, SomeRepository.class); // generic[0]=?
|
||||
ResolvableType arg2 = ResolvableType.forMethodParameter(method, 2, SomeRepository.class); // generic[0]=java.lang.Object
|
||||
|
||||
assertThat(returnType.equalsType(arg0.as(Class.class).getGeneric(0))).isTrue();
|
||||
assertThat(returnType.equalsType(arg1.as(Class.class).getGeneric(0))).isFalse();
|
||||
assertThat(returnType.equalsType(arg2.as(Class.class).getGeneric(0))).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -964,8 +981,8 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void isAssignableFromMustNotBeNull() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forClass(Object.class).isAssignableFrom((ResolvableType) null))
|
||||
.withMessage("ResolvableType must not be null");
|
||||
.isThrownBy(() -> ResolvableType.forClass(Object.class).isAssignableFrom((ResolvableType) null))
|
||||
.withMessage("ResolvableType must not be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1220,9 +1237,9 @@ class ResolvableTypeTests {
|
||||
@Test
|
||||
void forClassWithMismatchedGenerics() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> ResolvableType.forClassWithGenerics(Map.class, Integer.class))
|
||||
.withMessageContaining("Mismatched number of generics specified for")
|
||||
.withMessageContaining("java.util.Map<K,V>");
|
||||
.isThrownBy(() -> ResolvableType.forClassWithGenerics(Map.class, Integer.class))
|
||||
.withMessageContaining("Mismatched number of generics specified for")
|
||||
.withMessageContaining("java.util.Map<K,V>");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1368,6 +1385,12 @@ class ResolvableTypeTests {
|
||||
}
|
||||
|
||||
|
||||
interface SomeRepository {
|
||||
|
||||
<T> T someMethod(Class<T> arg0, Class<?> arg1, Class<Object> arg2);
|
||||
}
|
||||
|
||||
|
||||
static class Fields<T> {
|
||||
|
||||
public List classType;
|
||||
|
||||
Reference in New Issue
Block a user