From be187babf9d00c5145bd43f9300eadf472a9af87 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 21 Oct 2016 12:26:06 +0200 Subject: [PATCH] ResolvableType equals/hashCode does not consider TypeProvider source Issue: SPR-14826 --- .../java/org/springframework/core/ResolvableType.java | 4 ++-- .../org/springframework/core/ResolvableTypeTests.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index e3bdd698c73..7d318b742ac 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -837,7 +837,7 @@ public class ResolvableType implements Serializable { } if (this.typeProvider != otherType.typeProvider && (this.typeProvider == null || otherType.typeProvider == null || - !ObjectUtils.nullSafeEquals(this.typeProvider.getSource(), otherType.typeProvider.getSource()))) { + !ObjectUtils.nullSafeEquals(this.typeProvider.getType(), otherType.typeProvider.getType()))) { return false; } if (this.variableResolver != otherType.variableResolver && @@ -859,7 +859,7 @@ public class ResolvableType implements Serializable { private int calculateHashCode() { int hashCode = ObjectUtils.nullSafeHashCode(this.type); if (this.typeProvider != null) { - hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.typeProvider.getSource()); + hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.typeProvider.getType()); } if (this.variableResolver != null) { hashCode = 31 * hashCode + ObjectUtils.nullSafeHashCode(this.variableResolver.getSource()); diff --git a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java index 9ea4c209b6d..6865b47b306 100644 --- a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java +++ b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java @@ -175,6 +175,14 @@ public class ResolvableTypeTests { ResolvableType type = ResolvableType.forField(field); assertThat(type.getType(), equalTo(field.getGenericType())); 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 @@ -1384,6 +1392,9 @@ public class ResolvableTypeTests { @SuppressWarnings("unused") private List privateField; + @SuppressWarnings("unused") + private List otherPrivateField; + public Map, Map> nested; public T[] variableTypeGenericArray;