ConversionService is able to work with "Collections.emptyList()" as target type (again; SPR-7293)
This commit is contained in:
@@ -60,6 +60,9 @@ final class CollectionToCollectionConverter implements ConditionalGenericConvert
|
|||||||
}
|
}
|
||||||
boolean copyRequired = !targetType.getType().isInstance(source);
|
boolean copyRequired = !targetType.getType().isInstance(source);
|
||||||
Collection<?> sourceCollection = (Collection<?>) source;
|
Collection<?> sourceCollection = (Collection<?>) source;
|
||||||
|
if (!copyRequired && sourceCollection.isEmpty()) {
|
||||||
|
return sourceCollection;
|
||||||
|
}
|
||||||
Collection<Object> target = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
|
Collection<Object> target = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
|
||||||
if (targetType.getElementTypeDescriptor() == null) {
|
if (targetType.getElementTypeDescriptor() == null) {
|
||||||
for (Object element : sourceCollection) {
|
for (Object element : sourceCollection) {
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ final class MapToMapConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
boolean copyRequired = !targetType.getType().isInstance(source);
|
boolean copyRequired = !targetType.getType().isInstance(source);
|
||||||
Map<Object, Object> sourceMap = (Map<Object, Object>) source;
|
Map<Object, Object> sourceMap = (Map<Object, Object>) source;
|
||||||
|
if (!copyRequired && sourceMap.isEmpty()) {
|
||||||
|
return sourceMap;
|
||||||
|
}
|
||||||
Map<Object, Object> targetMap = CollectionFactory.createMap(targetType.getType(), sourceMap.size());
|
Map<Object, Object> targetMap = CollectionFactory.createMap(targetType.getType(), sourceMap.size());
|
||||||
for (Map.Entry<Object, Object> entry : sourceMap.entrySet()) {
|
for (Map.Entry<Object, Object> entry : sourceMap.entrySet()) {
|
||||||
Object sourceKey = entry.getKey();
|
Object sourceKey = entry.getKey();
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.net.URL;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@@ -284,6 +285,15 @@ public class CollectionToCollectionConverterTests {
|
|||||||
testCollectionConversionToArrayList(vector);
|
testCollectionConversionToArrayList(vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCollectionsEmptyList() throws Exception {
|
||||||
|
CollectionToCollectionConverter converter = new CollectionToCollectionConverter(new GenericConversionService());
|
||||||
|
TypeDescriptor type = new TypeDescriptor(getClass().getField("list"));
|
||||||
|
converter.convert(list, type, TypeDescriptor.valueOf(Class.forName("java.util.Collections$EmptyList")));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List list = Collections.emptyList();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private void testCollectionConversionToArrayList(Collection<String> aSource) {
|
private void testCollectionConversionToArrayList(Collection<String> aSource) {
|
||||||
Object myConverted = (new CollectionToCollectionConverter(new GenericConversionService())).convert(
|
Object myConverted = (new CollectionToCollectionConverter(new GenericConversionService())).convert(
|
||||||
|
|||||||
Reference in New Issue
Block a user