From fa1553e61a9f2830a093b1b3ad743f80f1b0c02f Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 27 Dec 2025 13:38:42 -0500 Subject: [PATCH] Avoid optional wrapper --- .../dynresources/DynamicModelSystem.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java index e53905bf..0a1c8180 100644 --- a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java +++ b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java @@ -33,7 +33,6 @@ import org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.ModelDiscover import java.io.Reader; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; import java.util.function.BiFunction; import java.util.stream.Collectors; @@ -155,22 +154,34 @@ public class DynamicModelSystem { } } + private static final Object NULL_BAKED = new Object(); + public static Map createDynamicBakedRegistry(Map input, BiFunction baker) { // TODO: support persistence of overrides - LoadingCache> bakedCache = CacheBuilder.newBuilder().softValues().maximumSize(1000).build(new CacheLoader<>() { + LoadingCache bakedCache = CacheBuilder.newBuilder().softValues().maximumSize(1000).build(new CacheLoader<>() { @Override - public Optional load(K key) throws Exception { + public Object load(K key) throws Exception { var unbaked = input.get(key); if (unbaked != null) { if (DEBUG_DYNAMIC_MODEL_LOADING) { ModernFix.LOGGER.info("Baking {}", key); } - return Optional.ofNullable(baker.apply(key, unbaked)); + return baker.apply(key, unbaked); } else { - return Optional.empty(); + return NULL_BAKED; } } }); - return Maps.asMap(input.keySet(), k -> k != null ? bakedCache.getUnchecked(k).orElse(null) : null); + return Maps.asMap(input.keySet(), k -> { + if (k != null) { + Object value = bakedCache.getUnchecked(k); + if (value == NULL_BAKED) { + value = null; + } + return (V)value; + } else { + return null; + } + }); } }