Browse Source

TypeVariablesVariableResolver compares variables by name

Issue: SPR-16456
pull/1659/merge
Juergen Hoeller 8 years ago
parent
commit
30f6e447d5
  1. 3
      spring-core/src/main/java/org/springframework/core/ResolvableType.java
  2. 14
      spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java

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

@ -1468,8 +1468,7 @@ public class ResolvableType implements Serializable { @@ -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];
}
}

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

@ -1337,6 +1337,14 @@ public class ResolvableTypeTests { @@ -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 { @@ -1637,4 +1645,10 @@ public class ResolvableTypeTests {
public Collection<IBase<BT>> stuff;
}
public abstract class UnresolvedWithGenerics {
Set<Integer> set;
}
}

Loading…
Cancel
Save