ConcurrentMapCache.putIfAbsent properly supports nulls

Issue: SPR-13458
This commit is contained in:
Juergen Hoeller 2015-09-10 14:02:18 +02:00
parent f3b7e9ff2d
commit 4dee9cbf62
2 changed files with 16 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2015 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -124,7 +124,7 @@ public class ConcurrentMapCache implements Cache {
@Override @Override
public ValueWrapper putIfAbsent(Object key, Object value) { public ValueWrapper putIfAbsent(Object key, Object value) {
Object existing = this.store.putIfAbsent(key, value); Object existing = this.store.putIfAbsent(key, toStoreValue(value));
return toWrapper(existing); return toWrapper(existing);
} }
@ -169,6 +169,7 @@ public class ConcurrentMapCache implements Cache {
return (value != null ? new SimpleValueWrapper(fromStoreValue(value)) : null); return (value != null ? new SimpleValueWrapper(fromStoreValue(value)) : null);
} }
@SuppressWarnings("serial") @SuppressWarnings("serial")
private static class NullHolder implements Serializable { private static class NullHolder implements Serializable {
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2015 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -50,6 +50,18 @@ public class ConcurrentMapCacheManagerTests {
assertEquals(2, cache1.get("key2").get()); assertEquals(2, cache1.get("key2").get());
cache1.put("key3", null); cache1.put("key3", null);
assertNull(cache1.get("key3").get()); assertNull(cache1.get("key3").get());
cache1.put("key3", null);
assertNull(cache1.get("key3").get());
cache1.evict("key3");
assertNull(cache1.get("key3"));
assertEquals("value1", cache1.putIfAbsent("key1", "value1x").get());
assertEquals("value1", cache1.get("key1").get());
assertEquals(2, cache1.putIfAbsent("key2", 2.1).get());
assertNull(cache1.putIfAbsent("key3", null));
assertNull(cache1.get("key3").get());
assertNull(cache1.putIfAbsent("key3", null).get());
assertNull(cache1.get("key3").get());
cache1.evict("key3"); cache1.evict("key3");
assertNull(cache1.get("key3")); assertNull(cache1.get("key3"));
} }