Fix ResolvableType raw class isAssignable checks
Fix `isAssignable` for `ResolvableType.forRawClass` so that it can be used with types backed by a `TypeVarible`. Prior to this commit the rawClass value was used, which wouldn't always work. Closes gh-23321
This commit is contained in:
parent
f92b60c08f
commit
e5bef10d85
|
@ -1015,7 +1015,7 @@ public class ResolvableType implements Serializable {
|
|||
}
|
||||
@Override
|
||||
public boolean isAssignableFrom(ResolvableType other) {
|
||||
Class<?> otherClass = other.getRawClass();
|
||||
Class<?> otherClass = other.resolve();
|
||||
return (otherClass != null && (clazz == null || ClassUtils.isAssignable(clazz, otherClass)));
|
||||
}
|
||||
};
|
||||
|
|
|
@ -135,6 +135,18 @@ public class ResolvableTypeTests {
|
|||
assertTrue(type.isAssignableFrom(String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void forRawClassAssignableFromTypeVariable() { // gh-23321
|
||||
ResolvableType typeVariable = ResolvableType.forClass(ExtendsList.class).as(List.class).getGeneric();
|
||||
ResolvableType raw = ResolvableType.forRawClass(CharSequence.class);
|
||||
assertThat(raw.resolve()).isEqualTo(CharSequence.class);
|
||||
assertThat(typeVariable.resolve()).isEqualTo(CharSequence.class);
|
||||
assertThat(raw.resolve().isAssignableFrom(typeVariable.resolve())).isTrue();
|
||||
assertThat(typeVariable.resolve().isAssignableFrom(raw.resolve())).isTrue();
|
||||
assertThat(raw.isAssignableFrom(typeVariable)).isTrue();
|
||||
assertThat(typeVariable.isAssignableFrom(raw)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void forInstanceMustNotBeNull() {
|
||||
this.thrown.expect(IllegalArgumentException.class);
|
||||
|
|
Loading…
Reference in New Issue