From f27d94cf265189b19e40f8a93a42d3e82c442f62 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 18 Apr 2023 22:24:48 -0400 Subject: [PATCH] Disable class info clearing by default and only clear non-mixin entries --- .../modernfix/core/config/ModernFixEarlyConfig.java | 1 + .../java/org/embeddedt/modernfix/util/ClassInfoManager.java | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 1cb8f773..b92d790a 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -42,6 +42,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("perf.state_definition_construct", modPresent("ferritecore")); this.addMixinRule("perf.cache_strongholds", true); this.addMixinRule("perf.dedup_blockstate_flattening_map", false); + this.addMixinRule("perf.clear_mixin_classinfo", false); this.addMixinRule("perf.cache_upgraded_structures", true); this.addMixinRule("perf.biome_zoomer", true); this.addMixinRule("perf.compress_blockstate", false); diff --git a/src/main/java/org/embeddedt/modernfix/util/ClassInfoManager.java b/src/main/java/org/embeddedt/modernfix/util/ClassInfoManager.java index 9043c013..34a6d53f 100644 --- a/src/main/java/org/embeddedt/modernfix/util/ClassInfoManager.java +++ b/src/main/java/org/embeddedt/modernfix/util/ClassInfoManager.java @@ -1,5 +1,6 @@ package org.embeddedt.modernfix.util; +import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.spongepowered.asm.mixin.transformer.ClassInfo; import java.lang.reflect.Field; @@ -9,6 +10,8 @@ import java.util.Map; public class ClassInfoManager { private static Map classInfoCache = null; public static void clear() { + if(!ModernFixMixinPlugin.instance.isOptionEnabled("perf.clear_mixin_classinfo.ClassInfoManager")) + return; if(classInfoCache == null) { try { Field field = ClassInfo.class.getDeclaredField("cache"); @@ -20,7 +23,7 @@ public class ClassInfoManager { } } try { - classInfoCache.entrySet().removeIf(entry -> !entry.getKey().equals("java/lang/Object")); + classInfoCache.entrySet().removeIf(entry -> !entry.getKey().equals("java/lang/Object") && (entry.getValue() == null || !entry.getValue().isMixin())); } catch(RuntimeException e) { e.printStackTrace(); }