From 0db257cbe31c63ed80694cd1bdbadafd463f0eee Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 9 Feb 2012 12:24:13 +0100 Subject: [PATCH] restored preference for covariant return type if applicable --- .../springframework/core/convert/Property.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/Property.java b/org.springframework.core/src/main/java/org/springframework/core/convert/Property.java index b1e0d9c612..09a1e6ada0 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/Property.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/Property.java @@ -142,10 +142,20 @@ public final class Property { private MethodParameter resolveMethodParameter() { MethodParameter read = resolveReadMethodParameter(); MethodParameter write = resolveWriteMethodParameter(); - if (read == null && write == null) { - throw new IllegalStateException("Property is neither readable nor writeable"); + if (write == null) { + if (read == null) { + throw new IllegalStateException("Property is neither readable nor writeable"); + } + return read; } - return (write != null ? write : read); + if (read != null) { + Class readType = read.getParameterType(); + Class writeType = write.getParameterType(); + if (!writeType.equals(readType) && writeType.isAssignableFrom(readType)) { + return read; + } + } + return write; } private MethodParameter resolveReadMethodParameter() {