Skip to content

Commit 7eeb654

Browse files
committed
ConversionService is able to work with "Collections.emptyList()" as target type (again; SPR-7293)
1 parent b558c62 commit 7eeb654

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor t
6060
}
6161
boolean copyRequired = !targetType.getType().isInstance(source);
6262
Collection<?> sourceCollection = (Collection<?>) source;
63+
if (!copyRequired && sourceCollection.isEmpty()) {
64+
return sourceCollection;
65+
}
6366
Collection<Object> target = CollectionFactory.createCollection(targetType.getType(), sourceCollection.size());
6467
if (targetType.getElementTypeDescriptor() == null) {
6568
for (Object element : sourceCollection) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor t
5959
}
6060
boolean copyRequired = !targetType.getType().isInstance(source);
6161
Map<Object, Object> sourceMap = (Map<Object, Object>) source;
62+
if (!copyRequired && sourceMap.isEmpty()) {
63+
return sourceMap;
64+
}
6265
Map<Object, Object> targetMap = CollectionFactory.createMap(targetType.getType(), sourceMap.size());
6366
for (Map.Entry<Object, Object> entry : sourceMap.entrySet()) {
6467
Object sourceKey = entry.getKey();

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.ArrayList;
2525
import java.util.Arrays;
2626
import java.util.Collection;
27+
import java.util.Collections;
2728
import java.util.LinkedList;
2829
import java.util.List;
2930
import java.util.Vector;
@@ -284,6 +285,15 @@ public void convertNonEmptyVector_shouldReturnNonEmptyArrayList() {
284285
testCollectionConversionToArrayList(vector);
285286
}
286287

288+
@Test
289+
public void testCollectionsEmptyList() throws Exception {
290+
CollectionToCollectionConverter converter = new CollectionToCollectionConverter(new GenericConversionService());
291+
TypeDescriptor type = new TypeDescriptor(getClass().getField("list"));
292+
converter.convert(list, type, TypeDescriptor.valueOf(Class.forName("java.util.Collections$EmptyList")));
293+
}
294+
295+
public List list = Collections.emptyList();
296+
287297
@SuppressWarnings("rawtypes")
288298
private void testCollectionConversionToArrayList(Collection<String> aSource) {
289299
Object myConverted = (new CollectionToCollectionConverter(new GenericConversionService())).convert(

0 commit comments

Comments
 (0)