diff --git a/src/main/java/org/springframework/data/util/TypeDiscoverer.java b/src/main/java/org/springframework/data/util/TypeDiscoverer.java index 9f587e498..3935501bf 100644 --- a/src/main/java/org/springframework/data/util/TypeDiscoverer.java +++ b/src/main/java/org/springframework/data/util/TypeDiscoverer.java @@ -609,5 +609,40 @@ class TypeDiscoverer implements TypeInformation { return result; } + + /* + * (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + + if (this == obj) { + return true; + } + + if (!(obj instanceof SyntheticParamterizedType)) { + return false; + } + + SyntheticParamterizedType that = (SyntheticParamterizedType) obj; + + return this.typeInformation.equals(that.typeInformation) && this.typeParameters.equals(that.typeParameters); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + + int result = 17; + + result += 31 * typeInformation.hashCode(); + result += 31 * typeParameters.hashCode(); + + return result; + } } } diff --git a/src/test/java/org/springframework/data/util/ClassTypeInformationUnitTests.java b/src/test/java/org/springframework/data/util/ClassTypeInformationUnitTests.java index ef1ef5355..83169819c 100644 --- a/src/test/java/org/springframework/data/util/ClassTypeInformationUnitTests.java +++ b/src/test/java/org/springframework/data/util/ClassTypeInformationUnitTests.java @@ -382,6 +382,24 @@ public class ClassTypeInformationUnitTests { assertThat(property.specialize(from), is((TypeInformation) from)); } + /** + * @see DATACMNS-855 + */ + @Test + @SuppressWarnings("rawtypes") + public void specializedTypeEqualsAndHashCode() { + + ClassTypeInformation root = ClassTypeInformation.from(Foo.class); + TypeInformation property = root.getProperty("abstractBar"); + + TypeInformation left = property.specialize(ClassTypeInformation.from(Bar.class)); + TypeInformation right = property.specialize(ClassTypeInformation.from(Bar.class)); + + assertThat(left, is(right)); + assertThat(right, is(left)); + assertThat(left.hashCode(), is(right.hashCode())); + } + static class StringMapContainer extends MapContainer { }