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
 | 
								@Override
 | 
				
			||||||
			public boolean isAssignableFrom(ResolvableType other) {
 | 
								public boolean isAssignableFrom(ResolvableType other) {
 | 
				
			||||||
				Class<?> otherClass = other.getRawClass();
 | 
									Class<?> otherClass = other.resolve();
 | 
				
			||||||
				return (otherClass != null && (clazz == null || ClassUtils.isAssignable(clazz, otherClass)));
 | 
									return (otherClass != null && (clazz == null || ClassUtils.isAssignable(clazz, otherClass)));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,6 +135,18 @@ public class ResolvableTypeTests {
 | 
				
			||||||
		assertTrue(type.isAssignableFrom(String.class));
 | 
							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
 | 
						@Test
 | 
				
			||||||
	public void forInstanceMustNotBeNull() {
 | 
						public void forInstanceMustNotBeNull() {
 | 
				
			||||||
		this.thrown.expect(IllegalArgumentException.class);
 | 
							this.thrown.expect(IllegalArgumentException.class);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue