ConcurrentMapperHashMap extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable { @Override public V put(K key, V value) { if (key == null) { throw new NullPointerException("Key is null"); } if (value == null) { throw new NullPointerException("Value is null"); } IK innerKey = mapKey(key); IV oldInnerValue = innerConcurrentMap.put( innerKey, mapValue(key, value)); if (oldInnerValue == null) { return null; } unmapKey(innerKey); return unmapValue(oldInnerValue); } protected  ConcurrentMapperHashMap(
		ConcurrentMap<IK, IV> innerConcurrentMap); @Override void clear(); @Override V compute(
		K key,
		BiFunction<? super K, ? super V, ? extends V> remappingFunction); @Override V computeIfAbsent(
		K key, Function<? super K, ? extends V> mappingFunction); @Override V computeIfPresent(
		K key,
		BiFunction<? super K, ? super V, ? extends V> remappingFunction); @Override boolean containsKey(Object key); @Override boolean containsValue(Object value); @Override Set<Entry<K, V>> entrySet(); @Override V get(Object key); @Override boolean isEmpty(); @Override Set<K> keySet(); @Override V put(K key, V value); @Override void putAll(Map<? extends K, ? extends V> map); @Override V putIfAbsent(K key, V value); @Override V remove(Object key); @Override boolean remove(Object key, Object value); @Override V replace(K key, V value); @Override boolean replace(K key, V oldValue, V newValue); @Override int size(); @Override Collection<V> values();  }
@Test public void testPut() { try { _concurrentMap.put(null, null); Assert.fail(); } catch (NullPointerException nullPointerException) { Assert.assertEquals( "Key is null", nullPointerException.getMessage()); } try { _concurrentMap.put(_testKey, null); Assert.fail(); } catch (NullPointerException nullPointerException) { Assert.assertEquals( "Value is null", nullPointerException.getMessage()); } Assert.assertNull(_concurrentMap.put(_testKey, _testValue1)); _assertEventQueue(Event.MAP_KEY, Event.MAP_VALUE); Assert.assertSame( _testValue1, _concurrentMap.put(_testKey, _testValue1)); _assertEventQueue( Event.MAP_KEY, Event.MAP_VALUE, Event.UNMAP_KEY, Event.UNMAP_VALUE); Assert.assertSame( _testValue1, _concurrentMap.put(_testKey, _testValue2)); _assertEventQueue( Event.MAP_KEY, Event.MAP_VALUE, Event.UNMAP_KEY, Event.UNMAP_VALUE); Assert.assertSame( _testValue2, _concurrentMap.put(_testKey, _testValue2)); _assertEventQueue( Event.MAP_KEY, Event.MAP_VALUE, Event.UNMAP_KEY, Event.UNMAP_VALUE); Assert.assertSame(_testValue2, _concurrentMap.get(_testKey)); _assertEventQueue(Event.MAP_KEY_FOR_QUERY, Event.UNMAP_VALUE_FOR_QUERY); }