added utility method to reduce code duplication
This commit is contained in:
@@ -49,23 +49,7 @@ final class ArrayToCollectionConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (targetType.getElementTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor(), conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|||||||
@@ -49,23 +49,7 @@ final class CollectionToArrayConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (sourceType.getElementTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor(), conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
|
|||||||
@@ -49,27 +49,7 @@ final class CollectionToCollectionConverter implements ConditionalGenericConvert
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (targetType.getElementTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor(), conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|||||||
@@ -43,23 +43,7 @@ final class CollectionToObjectConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (sourceType.getElementTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType, conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
|
|||||||
@@ -45,23 +45,7 @@ final class CollectionToStringConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (sourceType.getElementTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType, conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.springframework.core.convert.support;
|
package org.springframework.core.convert.support;
|
||||||
|
|
||||||
import org.springframework.core.convert.ConversionFailedException;
|
import org.springframework.core.convert.ConversionFailedException;
|
||||||
|
import org.springframework.core.convert.ConversionService;
|
||||||
import org.springframework.core.convert.TypeDescriptor;
|
import org.springframework.core.convert.TypeDescriptor;
|
||||||
import org.springframework.core.convert.converter.GenericConverter;
|
import org.springframework.core.convert.converter.GenericConverter;
|
||||||
|
|
||||||
@@ -40,5 +41,29 @@ abstract class ConversionUtils {
|
|||||||
throw new ConversionFailedException(sourceType, targetType, source, ex);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,51 +72,11 @@ final class MapToMapConverter implements ConditionalGenericConverter {
|
|||||||
// internal helpers
|
// internal helpers
|
||||||
|
|
||||||
private boolean canConvertKey(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
private boolean canConvertKey(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (targetType.getMapKeyTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getMapKeyTypeDescriptor(), targetType.getMapKeyTypeDescriptor(), conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canConvertValue(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
private boolean canConvertValue(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (targetType.getMapValueTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType.getMapValueTypeDescriptor(), targetType.getMapValueTypeDescriptor(), conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object convertKey(Object sourceKey, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
private Object convertKey(Object sourceKey, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
|
|||||||
@@ -44,19 +44,7 @@ final class ObjectToArrayConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
boolean canConvert = conversionService.canConvert(sourceType, targetType.getElementTypeDescriptor());
|
return ConversionUtils.canConvertElements(sourceType, targetType.getElementTypeDescriptor(), conversionService);
|
||||||
if (canConvert) {
|
|
||||||
// yes
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
if (sourceType.getType().isAssignableFrom(targetType.getElementTypeDescriptor().getType())) {
|
|
||||||
// maybe;
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
// no;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
|
|||||||
@@ -46,23 +46,7 @@ final class ObjectToCollectionConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||||
if (targetType.getElementTypeDescriptor() == null) {
|
return ConversionUtils.canConvertElements(sourceType, targetType.getElementTypeDescriptor(), conversionService);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|||||||
Reference in New Issue
Block a user