Skip to content

Commit 8668fad

Browse files
authored
fix(spring): improve null safety for cache get with loader (#309)
1 parent 8b7b154 commit 8668fad

File tree

2 files changed

+14
-36
lines changed

2 files changed

+14
-36
lines changed

spring-java17/src/main/java/io/github/xanthic/cache/springjdk17/XanthicSpringCache.java

+7-18
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,13 @@ public XanthicSpringCache(String name, Cache<Object, Object> cache) {
3131
@SuppressWarnings("unchecked")
3232
@Override
3333
public <T> T get(@NotNull Object key, @NotNull Callable<T> valueLoader) {
34-
return (T) cache.computeIfAbsent(key, k -> getSynchronized(key, valueLoader));
35-
}
36-
37-
@SuppressWarnings("unchecked")
38-
private synchronized <T> T getSynchronized(Object key, Callable<T> valueLoader) {
39-
ValueWrapper result = get(key);
40-
41-
if (result != null) {
42-
return (T) result.get();
43-
}
44-
45-
T value;
46-
try {
47-
value = valueLoader.call();
48-
} catch (Exception e) {
49-
throw new ValueRetrievalException(key, valueLoader, e);
50-
}
51-
return value;
34+
return (T) fromStoreValue(cache.computeIfAbsent(key, k -> {
35+
try {
36+
return toStoreValue(valueLoader.call());
37+
} catch (Exception e) {
38+
throw new ValueRetrievalException(key, valueLoader, e);
39+
}
40+
}));
5241
}
5342

5443
@Override

spring/src/main/java/io/github/xanthic/cache/spring/XanthicSpringCache.java

+7-18
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,13 @@ public XanthicSpringCache(String name, Cache<Object, Object> cache) {
2929
@SuppressWarnings("unchecked")
3030
@Override
3131
public <T> T get(@NotNull Object key, @NotNull Callable<T> valueLoader) {
32-
return (T) cache.computeIfAbsent(key, k -> getSynchronized(key, valueLoader));
33-
}
34-
35-
@SuppressWarnings("unchecked")
36-
private synchronized <T> T getSynchronized(Object key, Callable<T> valueLoader) {
37-
ValueWrapper result = get(key);
38-
39-
if (result != null) {
40-
return (T) result.get();
41-
}
42-
43-
T value;
44-
try {
45-
value = valueLoader.call();
46-
} catch (Exception e) {
47-
throw new ValueRetrievalException(key, valueLoader, e);
48-
}
49-
return value;
32+
return (T) fromStoreValue(cache.computeIfAbsent(key, k -> {
33+
try {
34+
return toStoreValue(valueLoader.call());
35+
} catch (Exception e) {
36+
throw new ValueRetrievalException(key, valueLoader, e);
37+
}
38+
}));
5039
}
5140

5241
@Override

0 commit comments

Comments
 (0)