Consistent support for EnumSet subclasses in CollectionFactory
Issue: SPR-17619
This commit is contained in:
parent
7a7958f275
commit
31a24720a6
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -195,7 +195,7 @@ public final class CollectionFactory {
|
|||
throw new IllegalArgumentException("Unsupported Collection interface: " + collectionType.getName());
|
||||
}
|
||||
}
|
||||
else if (EnumSet.class == collectionType) {
|
||||
else if (EnumSet.class.isAssignableFrom(collectionType)) {
|
||||
Assert.notNull(elementType, "Cannot create EnumSet for unknown element type");
|
||||
// Cast is necessary for compilation in Eclipse 4.4.1.
|
||||
return (Collection<E>) EnumSet.noneOf(asEnumType(elementType));
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -35,11 +35,11 @@ import java.util.TreeMap;
|
|||
import java.util.TreeSet;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.hamcrest.Matchers.empty;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.core.CollectionFactory.*;
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ public class CollectionFactoryTests {
|
|||
* {@link CollectionFactory#createApproximateMap(Object, int)}
|
||||
* is not type-safe.
|
||||
* <p>The reasoning is similar that described in
|
||||
* {@link #createApproximateCollectionIsNotTypeSafe()}.
|
||||
* {@link #createApproximateCollectionIsNotTypeSafeForEnumSet}.
|
||||
*/
|
||||
@Test
|
||||
public void createApproximateMapIsNotTypeSafeForEnumMap() {
|
||||
|
|
@ -242,6 +242,12 @@ public class CollectionFactoryTests {
|
|||
assertThat(createCollection(EnumSet.class, Color.class, 0), is(instanceOf(EnumSet.class)));
|
||||
}
|
||||
|
||||
@Test // SPR-17619
|
||||
public void createsEnumSetSubclass() {
|
||||
EnumSet<Color> enumSet = EnumSet.noneOf(Color.class);
|
||||
assertThat(createCollection(enumSet.getClass(), Color.class, 0), is(instanceOf(enumSet.getClass())));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void rejectsInvalidElementTypeForEnumSet() {
|
||||
createCollection(EnumSet.class, Object.class, 0);
|
||||
|
|
@ -297,7 +303,8 @@ public class CollectionFactoryTests {
|
|||
}
|
||||
|
||||
|
||||
static enum Color {
|
||||
enum Color {
|
||||
RED, BLUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue