diff options
author | jonmv <venstad@gmail.com> | 2022-10-26 11:22:28 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-10-26 11:22:28 +0200 |
commit | e97359f2fc892f72fae912ee3535b1cee50ae8e1 (patch) | |
tree | 271db682501043d4f53b331673467eea4840f00c /vespajlib/src | |
parent | b05406fb9cce3b9fe9dd7f4444d5d59eeee4e19f (diff) |
Cache negative results as well
Diffstat (limited to 'vespajlib/src')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/collections/MethodCache.java | 14 |
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; } |