From d9e5bc9345e66ce2203c86d6ff504bd2c56b020e Mon Sep 17 00:00:00 2001 From: Luck Date: Mon, 24 Jul 2017 19:42:35 +0100 Subject: [PATCH] fix error with null subject in ContextManager removal listener - closes #392 --- .../luckperms/common/contexts/ContextManager.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java b/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java index bbbd00fe6..5fcc0e7f0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java @@ -25,6 +25,8 @@ package me.lucko.luckperms.common.contexts; +import lombok.NonNull; + import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; import com.github.benmanes.caffeine.cache.RemovalListener; @@ -46,18 +48,23 @@ public abstract class ContextManager { private final LoadingCache activeContextCache = Caffeine.newBuilder() .weakKeys() .expireAfterWrite(50L, TimeUnit.MILLISECONDS) - .removalListener((RemovalListener) (t, contextSet, removalCause) -> invalidateContextsCache(t)) + .removalListener((RemovalListener) (t, contextSet, removalCause) -> { + if (t != null) { + invalidateContextsCache(t); + } + }) .build(t -> calculateApplicableContext(t, MutableContextSet.create()).makeImmutable()); private final LoadingCache contextsCache = Caffeine.newBuilder() .weakKeys() + .expireAfterWrite(100L, TimeUnit.MILLISECONDS) .build(t -> formContexts(t, getApplicableContext(t))); - public ImmutableContextSet getApplicableContext(T subject) { + public ImmutableContextSet getApplicableContext(@NonNull T subject) { return activeContextCache.get(subject); } - public Contexts getApplicableContexts(T subject) { + public Contexts getApplicableContexts(@NonNull T subject) { return contextsCache.get(subject); } @@ -100,7 +107,7 @@ public abstract class ContextManager { return accumulator.makeImmutable(); } - public void invalidateCache(T subject){ + public void invalidateCache(@NonNull T subject){ activeContextCache.invalidate(subject); }