ResolvableType equals/hashCode does not consider TypeProvider source
Issue: SPR-14826
This commit is contained in:
@@ -837,7 +837,7 @@ public class ResolvableType implements Serializable {
|
|||||||
}
|
}
|
||||||
if (this.typeProvider != otherType.typeProvider &&
|
if (this.typeProvider != otherType.typeProvider &&
|
||||||
(this.typeProvider == null || otherType.typeProvider == null ||
|
(this.typeProvider == null || otherType.typeProvider == null ||
|
||||||
!ObjectUtils.nullSafeEquals(this.typeProvider.getSource(), otherType.typeProvider.getSource()))) {
|
!ObjectUtils.nullSafeEquals(this.typeProvider.getType(), otherType.typeProvider.getType()))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (this.variableResolver != otherType.variableResolver &&
|
if (this.variableResolver != otherType.variableResolver &&
|
||||||
@@ -859,7 +859,7 @@ public class ResolvableType implements Serializable {
|
|||||||
private int calculateHashCode() {
|
private int calculateHashCode() {
|
||||||
int hashCode = ObjectUtils.nullSafeHashCode(this.type);
|
int hashCode = ObjectUtils.nullSafeHashCode(this.type);
|
||||||
if (this.typeProvider != null) {
|
if (this.typeProvider != null) {
|
||||||
hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.typeProvider.getSource());
|
hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.typeProvider.getType());
|
||||||
}
|
}
|
||||||
if (this.variableResolver != null) {
|
if (this.variableResolver != null) {
|
||||||
hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.variableResolver.getSource());
|
hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.variableResolver.getSource());
|
||||||
|
|||||||
@@ -175,6 +175,14 @@ public class ResolvableTypeTests {
|
|||||||
ResolvableType type = ResolvableType.forField(field);
|
ResolvableType type = ResolvableType.forField(field);
|
||||||
assertThat(type.getType(), equalTo(field.getGenericType()));
|
assertThat(type.getType(), equalTo(field.getGenericType()));
|
||||||
assertThat(type.resolve(), equalTo((Class) List.class));
|
assertThat(type.resolve(), equalTo((Class) List.class));
|
||||||
|
|
||||||
|
Field field2 = Fields.class.getDeclaredField("otherPrivateField");
|
||||||
|
ResolvableType type2 = ResolvableType.forField(field2);
|
||||||
|
assertThat(type2.getType(), equalTo(field2.getGenericType()));
|
||||||
|
assertThat(type2.resolve(), equalTo((Class) List.class));
|
||||||
|
|
||||||
|
assertEquals(type, type2);
|
||||||
|
assertEquals(type.hashCode(), type2.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1384,6 +1392,9 @@ public class ResolvableTypeTests {
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private List<String> privateField;
|
private List<String> privateField;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private List<String> otherPrivateField;
|
||||||
|
|
||||||
public Map<Map<String, Integer>, Map<Byte, Long>> nested;
|
public Map<Map<String, Integer>, Map<Byte, Long>> nested;
|
||||||
|
|
||||||
public T[] variableTypeGenericArray;
|
public T[] variableTypeGenericArray;
|
||||||
|
|||||||
Reference in New Issue
Block a user