From 6f45558eb30da09be2834bc555116ab7b7875844 Mon Sep 17 00:00:00 2001 From: slprime Date: Thu, 12 Dec 2024 19:30:13 +0200 Subject: [PATCH] change ItemFilterCache --- .../codechicken/nei/SearchTokenParser.java | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/main/java/codechicken/nei/SearchTokenParser.java b/src/main/java/codechicken/nei/SearchTokenParser.java index 3f2825ca0..96ba006b2 100644 --- a/src/main/java/codechicken/nei/SearchTokenParser.java +++ b/src/main/java/codechicken/nei/SearchTokenParser.java @@ -2,10 +2,12 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.WeakHashMap; import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -90,32 +92,17 @@ public boolean matches(ItemStack item) { private static class ItemFilterCache implements ItemFilter { + private final Map states; public ItemFilter filter; - private final ItemStackMap states = new ItemStackMap<>(); - private final ReentrantLock lock = new ReentrantLock(); public ItemFilterCache(ItemFilter filter) { + this.states = Collections.synchronizedMap(new WeakHashMap<>()); this.filter = filter; } @Override public boolean matches(ItemStack item) { - lock.lock(); - - try { - Boolean match = states.get(item); - - if (match == null) { - states.put(item, match = this.filter.matches(item)); - } - - return match; - } catch (Throwable th) { - th.printStackTrace(); - return false; - } finally { - lock.unlock(); - } + return states.computeIfAbsent(item, stack -> this.filter.matches(stack)); } }