LinkedCaseInsensitiveMap properly overrides HashMap.clone()
Issue: SPR-14509
This commit is contained in:
		
							parent
							
								
									249b798059
								
							
						
					
					
						commit
						dd65f7acfc
					
				| 
						 | 
				
			
			@ -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> {
 | 
			
		|||
		super.clear();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	public Object clone() {
 | 
			
		||||
		LinkedCaseInsensitiveMap<V> copy = (LinkedCaseInsensitiveMap<V>) super.clone();
 | 
			
		||||
		copy.caseInsensitiveKeys = new HashMap<>(this.caseInsensitiveKeys);
 | 
			
		||||
		return copy;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Convert the given key to a case-insensitive key.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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…
	
		Reference in New Issue