Skip to content

Commit

Permalink
Fix ResolvableType raw class isAssignable checks
Browse files Browse the repository at this point in the history
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 spring-projectsgh-23321
  • Loading branch information
philwebb committed Jul 20, 2019
1 parent f92b60c commit e5bef10
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,7 @@ public boolean isAssignableFrom(Class<?> other) {
}
@Override
public boolean isAssignableFrom(ResolvableType other) {
Class<?> otherClass = other.getRawClass();
Class<?> otherClass = other.resolve();
return (otherClass != null && (clazz == null || ClassUtils.isAssignable(clazz, otherClass)));
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,18 @@ public void forRawClassWithNull() throws Exception {
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);
Expand Down

0 comments on commit e5bef10

Please sign in to comment.