From acd863e748fa1575de9a081bf12373216199fa2c Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Thu, 7 Aug 2025 22:10:04 +0200 Subject: [PATCH] Speedup ClassDiscoverer by using ClassReader.SKIP_CODE (#33) --- .../java/codechicken/core/ClassDiscoverer.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/codechicken/core/ClassDiscoverer.java b/src/main/java/codechicken/core/ClassDiscoverer.java index 5f4099c..a2abe9b 100644 --- a/src/main/java/codechicken/core/ClassDiscoverer.java +++ b/src/main/java/codechicken/core/ClassDiscoverer.java @@ -11,6 +11,7 @@ import java.util.zip.ZipFile; import net.minecraft.launchwrapper.Launch; +import org.objectweb.asm.ClassReader; import org.objectweb.asm.tree.ClassNode; import com.google.common.collect.ImmutableList; @@ -22,6 +23,7 @@ import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModClassLoader; import cpw.mods.fml.relauncher.CoreModManager; +@SuppressWarnings("unused") public class ClassDiscoverer { public IStringMatcher matcher; @@ -35,17 +37,12 @@ public class ClassDiscoverer { for (int i = 0; i < superclasses.length; i++) this.superclasses[i] = superclasses[i].getName().replace('.', '/'); - classes = new ArrayList>(); + classes = new ArrayList<>(); modClassLoader = (ModClassLoader) Loader.instance().getModClassLoader(); } public ClassDiscoverer(Class... superclasses) { - this(new IStringMatcher() { - - public boolean matches(String test) { - return true; - } - }, superclasses); + this(test -> true, superclasses); } public ArrayList> findClasses() { @@ -63,7 +60,7 @@ public class ClassDiscoverer { byte[] bytes = Launch.classLoader.getClassBytes(classname); if (bytes == null) return; - ClassNode cnode = ASMHelper.createClassNode(bytes); + ClassNode cnode = ASMHelper.createClassNode(bytes, ClassReader.SKIP_CODE); for (String superclass : superclasses) if (!cnode.interfaces.contains(superclass) && !cnode.superName.equals(superclass)) return; @@ -86,7 +83,7 @@ public class ClassDiscoverer { List knownLibraries = ImmutableList.builder().addAll(modClassLoader.getDefaultLibraries()) .addAll(CoreModManager.getLoadedCoremods()).build(); File[] minecraftSources = modClassLoader.getParentSources(); - HashSet searchedSources = new HashSet(); + HashSet searchedSources = new HashSet<>(); for (File minecraftSource : minecraftSources) { if (searchedSources.contains(minecraftSource.getAbsolutePath())) continue; searchedSources.add(minecraftSource.getAbsolutePath());