diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java index a56448f09a5..99683631574 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java @@ -49,23 +49,7 @@ final class ArrayToCollectionConverter implements ConditionalGenericConverter { } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (targetType.getElementTypeDescriptor() == null) { - // yes - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getElementTypeDescriptor().getType().isAssignableFrom(targetType.getElementTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor(), conversionService); } @SuppressWarnings("unchecked") diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java index 8dfc1d23144..8dd42169bdf 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java @@ -49,23 +49,7 @@ final class CollectionToArrayConverter implements ConditionalGenericConverter { } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (sourceType.getElementTypeDescriptor() == null) { - // maybe - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getElementTypeDescriptor().getType().isAssignableFrom(targetType.getElementTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor(), conversionService); } public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java index fb6cdca9113..a27156db152 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java @@ -49,27 +49,7 @@ final class CollectionToCollectionConverter implements ConditionalGenericConvert } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (targetType.getElementTypeDescriptor() == null) { - // yes - return true; - } - if (sourceType.getElementTypeDescriptor() == null) { - // maybe - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getElementTypeDescriptor().getType().isAssignableFrom(targetType.getElementTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor(), conversionService); } @SuppressWarnings("unchecked") diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java index 64fc48f76b5..59e5ee4ef55 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java @@ -43,23 +43,7 @@ final class CollectionToObjectConverter implements ConditionalGenericConverter { } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (sourceType.getElementTypeDescriptor() == null) { - // maybe - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getElementTypeDescriptor(), targetType); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getElementTypeDescriptor().getType().isAssignableFrom(targetType.getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType, conversionService); } public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java index 619475cced2..ad67b8614eb 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java @@ -45,23 +45,7 @@ final class CollectionToStringConverter implements ConditionalGenericConverter { } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (sourceType.getElementTypeDescriptor() == null) { - // maybe - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getElementTypeDescriptor(), targetType); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getElementTypeDescriptor().getType().isAssignableFrom(targetType.getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType, conversionService); } public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java index 0b0c62221b6..2dafc8a53c0 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java @@ -17,6 +17,7 @@ package org.springframework.core.convert.support; import org.springframework.core.convert.ConversionFailedException; +import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.GenericConverter; @@ -40,5 +41,29 @@ abstract class ConversionUtils { throw new ConversionFailedException(sourceType, targetType, source, ex); } } + + public static boolean canConvertElements(TypeDescriptor sourceElementType, TypeDescriptor targetElementType, ConversionService conversionService) { + if (targetElementType == null) { + // yes + return true; + } + if (sourceElementType == null) { + // maybe + return true; + } + boolean canConvert = conversionService.canConvert(sourceElementType, targetElementType); + if (canConvert) { + // yes + return true; + } else { + if (sourceElementType.getType().isAssignableFrom(targetElementType.getType())) { + // maybe; + return true; + } else { + // no; + return false; + } + } + } } diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java index 896dd440e96..d507e9f06de 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java @@ -72,51 +72,11 @@ final class MapToMapConverter implements ConditionalGenericConverter { // internal helpers private boolean canConvertKey(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (targetType.getMapKeyTypeDescriptor() == null) { - // yes - return true; - } - if (sourceType.getMapKeyTypeDescriptor() == null) { - // maybe - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getMapKeyTypeDescriptor(), targetType.getMapKeyTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getMapKeyTypeDescriptor().getType().isAssignableFrom(targetType.getMapKeyTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getMapKeyTypeDescriptor(), targetType.getMapKeyTypeDescriptor(), conversionService); } private boolean canConvertValue(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (targetType.getMapValueTypeDescriptor() == null) { - // yes - return true; - } - if (sourceType.getMapValueTypeDescriptor() == null) { - // maybe - return true; - } - boolean canConvert = conversionService.canConvert(sourceType.getMapValueTypeDescriptor(), targetType.getMapValueTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getMapValueTypeDescriptor().getType().isAssignableFrom(targetType.getMapValueTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType.getMapValueTypeDescriptor(), targetType.getMapValueTypeDescriptor(), conversionService); } private Object convertKey(Object sourceKey, TypeDescriptor sourceType, TypeDescriptor targetType) { diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java index 5b272d15ec4..dd269b33201 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java @@ -44,19 +44,7 @@ final class ObjectToArrayConverter implements ConditionalGenericConverter { } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - boolean canConvert = conversionService.canConvert(sourceType, targetType.getElementTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getType().isAssignableFrom(targetType.getElementTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType, targetType.getElementTypeDescriptor(), conversionService); } public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java index bab8138e262..3a1dfb5d1b5 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java @@ -46,23 +46,7 @@ final class ObjectToCollectionConverter implements ConditionalGenericConverter { } public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - if (targetType.getElementTypeDescriptor() == null) { - // yes - return true; - } - boolean canConvert = conversionService.canConvert(sourceType, targetType.getElementTypeDescriptor()); - if (canConvert) { - // yes - return true; - } else { - if (sourceType.getType().isAssignableFrom(targetType.getElementTypeDescriptor().getType())) { - // maybe; - return true; - } else { - // no; - return false; - } - } + return ConversionUtils.canConvertElements(sourceType, targetType.getElementTypeDescriptor(), conversionService); } @SuppressWarnings("unchecked")