Merge 1.20.4 into 1.20.5
This commit is contained in:
commit
60c2b02e37
|
|
@ -12,7 +12,6 @@ import org.spongepowered.asm.service.MixinServiceAbstract;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -54,15 +53,13 @@ public class ClassInfoManager {
|
||||||
|
|
||||||
private static void doClear() {
|
private static void doClear() {
|
||||||
Map<String, ClassInfo> classInfoCache;
|
Map<String, ClassInfo> classInfoCache;
|
||||||
Field mixinField, stateField, classNodeField, methodsField, fieldsField;
|
Field mixinField, stateField, classNodeField;
|
||||||
Class<?> stateClz;
|
Class<?> stateClz;
|
||||||
try {
|
try {
|
||||||
disableLoggers();
|
disableLoggers();
|
||||||
Field field = accessible(ClassInfo.class.getDeclaredField("cache"));
|
Field field = accessible(ClassInfo.class.getDeclaredField("cache"));
|
||||||
classInfoCache = (Map<String, ClassInfo>) field.get(null);
|
classInfoCache = (Map<String, ClassInfo>) field.get(null);
|
||||||
mixinField = accessible(ClassInfo.class.getDeclaredField("mixin"));
|
mixinField = accessible(ClassInfo.class.getDeclaredField("mixin"));
|
||||||
methodsField = accessible(ClassInfo.class.getDeclaredField("methods"));
|
|
||||||
fieldsField = accessible(ClassInfo.class.getDeclaredField("fields"));
|
|
||||||
stateClz = Class.forName("org.spongepowered.asm.mixin.transformer.MixinInfo$State");
|
stateClz = Class.forName("org.spongepowered.asm.mixin.transformer.MixinInfo$State");
|
||||||
stateField = accessible(Class.forName("org.spongepowered.asm.mixin.transformer.MixinInfo").getDeclaredField("state"));
|
stateField = accessible(Class.forName("org.spongepowered.asm.mixin.transformer.MixinInfo").getDeclaredField("state"));
|
||||||
classNodeField = accessible(stateClz.getDeclaredField("classNode"));
|
classNodeField = accessible(stateClz.getDeclaredField("classNode"));
|
||||||
|
|
@ -73,7 +70,8 @@ public class ClassInfoManager {
|
||||||
MixinEnvironment.getDefaultEnvironment().audit();
|
MixinEnvironment.getDefaultEnvironment().audit();
|
||||||
try {
|
try {
|
||||||
ClassNode emptyNode = new ClassNode();
|
ClassNode emptyNode = new ClassNode();
|
||||||
classInfoCache.entrySet().removeIf(entry -> {
|
List<Map.Entry<String, ClassInfo>> entries = new ArrayList<>(classInfoCache.entrySet());
|
||||||
|
entries.stream().filter(entry -> {
|
||||||
if(entry.getKey().equals("java/lang/Object"))
|
if(entry.getKey().equals("java/lang/Object"))
|
||||||
return false;
|
return false;
|
||||||
ClassInfo mixinClz = entry.getValue();
|
ClassInfo mixinClz = entry.getValue();
|
||||||
|
|
@ -87,14 +85,11 @@ public class ClassInfoManager {
|
||||||
if (state != null)
|
if (state != null)
|
||||||
classNodeField.set(state, emptyNode);
|
classNodeField.set(state, emptyNode);
|
||||||
}
|
}
|
||||||
// clear fields, methods
|
|
||||||
((Collection<?>)methodsField.get(mixinClz)).clear();
|
|
||||||
((Collection<?>)fieldsField.get(mixinClz)).clear();
|
|
||||||
} catch (ReflectiveOperationException | RuntimeException e) {
|
} catch (ReflectiveOperationException | RuntimeException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
}).forEach(entry -> classInfoCache.remove(entry.getKey()));
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user