Browse Source

ConversionService is able to work with "Collections.emptyList()" as target type (again; SPR-7293)

3.0.x
Juergen Hoeller 14 years ago
parent
commit
7eeb654eec
  1. 3
      org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java
  2. 3
      org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java
  3. 10
      org.springframework.core/src/test/java/org/springframework/core/convert/support/CollectionToCollectionConverterTests.java

3
org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java

@ -60,6 +60,9 @@ final class CollectionToCollectionConverter implements ConditionalGenericConvert @@ -60,6 +60,9 @@ final class CollectionToCollectionConverter implements ConditionalGenericConvert
}
boolean copyRequired = !targetType.getType().isInstance(source);
Collection<?> sourceCollection = (Collection<?>) source;
if (!copyRequired && sourceCollection.isEmpty()) {
return sourceCollection;
}
Collection<Object> target = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
if (targetType.getElementTypeDescriptor() == null) {
for (Object element : sourceCollection) {

3
org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java

@ -59,6 +59,9 @@ final class MapToMapConverter implements ConditionalGenericConverter { @@ -59,6 +59,9 @@ final class MapToMapConverter implements ConditionalGenericConverter {
}
boolean copyRequired = !targetType.getType().isInstance(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());
for (Map.Entry<Object, Object> entry : sourceMap.entrySet()) {
Object sourceKey = entry.getKey();

10
org.springframework.core/src/test/java/org/springframework/core/convert/support/CollectionToCollectionConverterTests.java

@ -24,6 +24,7 @@ import java.net.URL; @@ -24,6 +24,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
@ -284,6 +285,15 @@ public class CollectionToCollectionConverterTests { @@ -284,6 +285,15 @@ public class CollectionToCollectionConverterTests {
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")
private void testCollectionConversionToArrayList(Collection<String> aSource) {
Object myConverted = (new CollectionToCollectionConverter(new GenericConversionService())).convert(

Loading…
Cancel
Save