From 30f6e447d5abcb44aa88cd11619fbe3524ea1c5c Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 2 Feb 2018 11:34:36 +0100 Subject: [PATCH] TypeVariablesVariableResolver compares variables by name Issue: SPR-16456 --- .../org/springframework/core/ResolvableType.java | 3 +-- .../springframework/core/ResolvableTypeTests.java | 14 ++++++++++++++ 2 files changed, 15 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 1c400202f3f..dd8945cda91 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -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]; } } 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 c36126a7b37..24ee9cdea42 100644 --- a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java +++ b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java @@ -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> stuff; } + + public abstract class UnresolvedWithGenerics { + + Set set; + } + }