Browse Source

LinkedCaseInsensitiveMap properly overrides HashMap.clone()

Issue: SPR-14509
(cherry picked from commit 6459559)
pull/1155/head
Juergen Hoeller 10 years ago
parent
commit
dadd2c3709
  1. 10
      spring-core/src/main/java/org/springframework/util/LinkedCaseInsensitiveMap.java
  2. 22
      spring-core/src/test/java/org/springframework/util/LinkedCaseInsensitiveMapTests.java

10
spring-core/src/main/java/org/springframework/util/LinkedCaseInsensitiveMap.java

@ -36,7 +36,7 @@ import java.util.Map; @@ -36,7 +36,7 @@ import java.util.Map;
@SuppressWarnings("serial")
public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> {
private final Map<String, String> caseInsensitiveKeys;
private Map<String, String> caseInsensitiveKeys;
private final Locale locale;
@ -151,6 +151,14 @@ public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> { @@ -151,6 +151,14 @@ public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> {
super.clear();
}
@Override
@SuppressWarnings("unchecked")
public Object clone() {
LinkedCaseInsensitiveMap<V> copy = (LinkedCaseInsensitiveMap<V>) super.clone();
copy.caseInsensitiveKeys = new HashMap<String, String>(this.caseInsensitiveKeys);
return copy;
}
/**
* Convert the given key to a case-insensitive key.

22
spring-core/src/test/java/org/springframework/util/LinkedCaseInsensitiveMapTests.java

@ -74,4 +74,26 @@ public class LinkedCaseInsensitiveMapTests { @@ -74,4 +74,26 @@ public class LinkedCaseInsensitiveMapTests {
assertEquals("N", map.getOrDefault(new Object(), "N"));
}
@Test
@SuppressWarnings("unchecked")
public void mapClone() {
map.put("key", "value1");
LinkedCaseInsensitiveMap<String> copy = (LinkedCaseInsensitiveMap<String>) map.clone();
assertEquals("value1", map.get("key"));
assertEquals("value1", map.get("KEY"));
assertEquals("value1", map.get("Key"));
assertEquals("value1", copy.get("key"));
assertEquals("value1", copy.get("KEY"));
assertEquals("value1", copy.get("Key"));
copy.put("Key", "value2");
assertEquals(1, map.size());
assertEquals(1, copy.size());
assertEquals("value1", map.get("key"));
assertEquals("value1", map.get("KEY"));
assertEquals("value1", map.get("Key"));
assertEquals("value2", copy.get("key"));
assertEquals("value2", copy.get("KEY"));
assertEquals("value2", copy.get("Key"));
}
}

Loading…
Cancel
Save