diff options
-rw-r--r-- | container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java | 2 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/collections/MethodCache.java | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java b/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java index cf3ff7d3d66..4ee8df0c249 100644 --- a/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java +++ b/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java @@ -114,7 +114,7 @@ public class CloneHelper { private Object cloneByReflection(Object object) { try { - Method cloneMethod = cloneMethodCache.get(object); + Method cloneMethod = cloneMethodCache.get(object, name -> log.warning("Caching the clone method of '" + name + "'. Let it implement com.yahoo.lang.PublicCloneable instead")); if (cloneMethod == null) { log.warning("'" + object + "' of class " + object.getClass() + " is Cloneable, but has no clone method - will use the same instance in all requests"); diff --git a/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java b/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java index 4a4331b1c6e..bf9200efb2e 100644 --- a/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java +++ b/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java @@ -4,6 +4,7 @@ package com.yahoo.collections; import com.yahoo.concurrent.CopyOnWriteHashMap; import java.lang.reflect.Method; +import java.util.function.Consumer; /** * This will cache methods solved by reflection as reflection is expensive. @@ -28,11 +29,17 @@ public final class MethodCache { public void clear() { cache.clear(); } + public Method get(Object object) { + return get(object, null); + } + public Method get(Object object, Consumer<String> onPut) { Method m = cache.get(object.getClass().getName()); if (m == null) { m = lookupMethod(object); if (m != null) { + if (onPut != null) + onPut.accept(object.getClass().getName()); cache.put(object.getClass().getName(), m); } } |