You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2020/03/07 20:35:53 UTC

[logging-log4j2] 01/03: Use weak cache for type closure lookup

This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch mean-bean-machine
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 6dc081251276c082cc9c02bae43f58e050d13ef5
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sat Mar 7 11:31:14 2020 -0600

    Use weak cache for type closure lookup
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java   | 6 ++++--
 .../java/org/apache/logging/log4j/plugins/util/WeakLazyValue.java   | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java
index f27a86f..9415b84 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java
@@ -402,10 +402,12 @@ public final class TypeUtil {
      * Returns the type closure of a generic type.
      */
     public static Collection<Type> getTypeClosure(final Type type) {
-        // TODO: weak cache?
-        return new TypeResolver(type).types.values();
+        return TYPE_CLOSURE_CACHE.get(type);
     }
 
+    private static final Cache<Type, Collection<Type>> TYPE_CLOSURE_CACHE = new WeakCache<>(
+            type -> WeakLazyValue.forSupplier(() -> new TypeResolver(type).types.values()));
+
     private static class TypeResolver {
         private final Map<TypeVariable<?>, Type> resolvedTypeVariables = new HashMap<>();
         private final Map<Class<?>, Type> types = new LinkedHashMap<>();
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/WeakLazyValue.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/WeakLazyValue.java
index 6f6cd07..b90a3a7 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/WeakLazyValue.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/WeakLazyValue.java
@@ -23,7 +23,7 @@ import java.util.function.Supplier;
 public class WeakLazyValue<T> implements Value<T> {
 
     public static <T> WeakLazyValue<T> forSupplier(final Supplier<T> valueSupplier) {
-        return new WeakLazyValue<T>(valueSupplier);
+        return new WeakLazyValue<>(valueSupplier);
     }
 
     private final Supplier<T> valueSupplier;