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;