Skip to content

Commit e5bef10

Browse files
committed
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
1 parent f92b60c commit e5bef10

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

spring-core/src/main/java/org/springframework/core/ResolvableType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,7 @@ public boolean isAssignableFrom(Class<?> other) {
10151015
}
10161016
@Override
10171017
public boolean isAssignableFrom(ResolvableType other) {
1018-
Class<?> otherClass = other.getRawClass();
1018+
Class<?> otherClass = other.resolve();
10191019
return (otherClass != null && (clazz == null || ClassUtils.isAssignable(clazz, otherClass)));
10201020
}
10211021
};

spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,18 @@ public void forRawClassWithNull() throws Exception {
135135
assertTrue(type.isAssignableFrom(String.class));
136136
}
137137

138+
@Test
139+
public void forRawClassAssignableFromTypeVariable() { // gh-23321
140+
ResolvableType typeVariable = ResolvableType.forClass(ExtendsList.class).as(List.class).getGeneric();
141+
ResolvableType raw = ResolvableType.forRawClass(CharSequence.class);
142+
assertThat(raw.resolve()).isEqualTo(CharSequence.class);
143+
assertThat(typeVariable.resolve()).isEqualTo(CharSequence.class);
144+
assertThat(raw.resolve().isAssignableFrom(typeVariable.resolve())).isTrue();
145+
assertThat(typeVariable.resolve().isAssignableFrom(raw.resolve())).isTrue();
146+
assertThat(raw.isAssignableFrom(typeVariable)).isTrue();
147+
assertThat(typeVariable.isAssignableFrom(raw)).isTrue();
148+
}
149+
138150
@Test
139151
public void forInstanceMustNotBeNull() {
140152
this.thrown.expect(IllegalArgumentException.class);

0 commit comments

Comments
 (0)