summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-10-26 11:22:28 +0200
committerjonmv <venstad@gmail.com>2022-10-26 11:22:28 +0200
commite97359f2fc892f72fae912ee3535b1cee50ae8e1 (patch)
tree271db682501043d4f53b331673467eea4840f00c /vespajlib
parentb05406fb9cce3b9fe9dd7f4444d5d59eeee4e19f (diff)
Cache negative results as well
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/collections/MethodCache.java14
1 files changed, 6 insertions, 8 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java b/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java
index 9f5beb3a983..ead1d109fba 100644
--- a/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java
+++ b/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java
@@ -38,19 +38,17 @@ public final class MethodCache {
public Method get(Object object, Consumer<String> onPut) {
WeakReference<Pair<Class<?>, Method>> value = cache.get(object.getClass().getName());
Pair<Class<?>, Method> pair = value == null ? null : value.get();
- if (pair == null || pair.getFirst() != object.getClass()) {
+ if (pair != null && pair.getFirst() != object.getClass()) {
cache.clear();
pair = null;
}
Method method = pair == null ? null : pair.getSecond();
- if (method == null) {
+ if (pair == null) {
method = lookupMethod(object);
- if (method != null) {
- pair = new Pair<>(object.getClass(), method);
- if (onPut != null)
- onPut.accept(object.getClass().getName());
- cache.put(object.getClass().getName(), new WeakReference<>(pair));
- }
+ pair = new Pair<>(object.getClass(), method);
+ cache.put(object.getClass().getName(), new WeakReference<>(pair));
+ if (method != null && onPut != null)
+ onPut.accept(object.getClass().getName());
}
return method;
}