TypeVariablesVariableResolver compares variables by name

Issue: SPR-16456
This commit is contained in:
Juergen Hoeller 2018-02-02 11:34:36 +01:00
parent b3e21ec737
commit 30f6e447d5
2 changed files with 15 additions and 2 deletions

View File

@ -1468,8 +1468,7 @@ public class ResolvableType implements Serializable {
@Nullable
public ResolvableType resolveVariable(TypeVariable<?> variable) {
for (int i = 0; i < this.variables.length; i++) {
if (ObjectUtils.nullSafeEquals(SerializableTypeWrapper.unwrap(this.variables[i]),
SerializableTypeWrapper.unwrap(variable))) {
if (ObjectUtils.nullSafeEquals(this.variables[i].getName(), variable.getName())) {
return this.generics[i];
}
}

View File

@ -1337,6 +1337,14 @@ public class ResolvableTypeTests {
assertTrue(setClass.isAssignableFrom(fromReturnType));
}
@Test
public void testSpr16456() throws Exception {
ResolvableType genericType = ResolvableType.forField(
UnresolvedWithGenerics.class.getDeclaredField("set")).asCollection();
ResolvableType type = ResolvableType.forClassWithGenerics(ArrayList.class, genericType.getGeneric());
assertThat(type.resolveGeneric(), equalTo(Integer.class));
}
private ResolvableType testSerialization(ResolvableType type) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
@ -1637,4 +1645,10 @@ public class ResolvableTypeTests {
public Collection<IBase<BT>> stuff;
}
public abstract class UnresolvedWithGenerics {
Set<Integer> set;
}
}