diff --git a/build.gradle b/build.gradle index b1b628d..7cf6c7c 100644 --- a/build.gradle +++ b/build.gradle @@ -78,6 +78,7 @@ dependencies { implementation('org.ow2.asm:asm:7.2') implementation('org.ow2.asm:asm-commons:7.2') implementation('org.ow2.asm:asm-tree:7.2') + implementation('org.ow2.asm:asm-util:7.2') implementation('net.minecraftforge:forgespi:3.1.+') implementation('com.google.code.findbugs:jsr305:3.0.2') diff --git a/src/main/java/net/minecraftforge/coremod/CoreModEngine.java b/src/main/java/net/minecraftforge/coremod/CoreModEngine.java index ac0b41a..834944d 100644 --- a/src/main/java/net/minecraftforge/coremod/CoreModEngine.java +++ b/src/main/java/net/minecraftforge/coremod/CoreModEngine.java @@ -16,7 +16,8 @@ public class CoreModEngine { private static final Marker COREMOD = MarkerManager.getMarker("COREMOD"); private List coreMods = new ArrayList<>(); static final Set ALLOWED_PACKAGES = new HashSet<>(Arrays.asList( - "java.util.function" + "java.util.function", + "org.objectweb.asm.util" // ASM util has nice debugging things like Trace visitors )); static final Set ALLOWED_CLASSES = new HashSet<>(Arrays.asList( "net.minecraftforge.coremod.api.ASMAPI","org.objectweb.asm.Opcodes", diff --git a/src/main/java/net/minecraftforge/coremod/api/ASMAPI.java b/src/main/java/net/minecraftforge/coremod/api/ASMAPI.java index b542df6..0820236 100644 --- a/src/main/java/net/minecraftforge/coremod/api/ASMAPI.java +++ b/src/main/java/net/minecraftforge/coremod/api/ASMAPI.java @@ -5,10 +5,15 @@ import net.minecraftforge.coremod.CoreModTracker; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.*; +import org.objectweb.asm.util.Textifier; +import org.objectweb.asm.util.TraceClassVisitor; +import org.objectweb.asm.util.TraceMethodVisitor; import javax.annotation.Nullable; import javax.script.ScriptException; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.lang.reflect.Modifier; import java.util.Iterator; import java.util.ListIterator; @@ -305,4 +310,30 @@ public static Object loadData(String file) throws ScriptException, IOException { public static void log(String level, String message, Object... args) { CoreModTracker.log(level, message, args); } + + public static String classNodeToString(ClassNode node) { + Textifier text = new Textifier(); + node.accept(new TraceClassVisitor(null, text, null)); + return toString(text); + } + + public static String fieldNodeToString(FieldNode node) { + Textifier text = new Textifier(); + node.accept(new TraceClassVisitor(null, text, null)); + return toString(text); + } + + public static String methodNodeToString(MethodNode node) { + Textifier text = new Textifier(); + node.accept(new TraceMethodVisitor(text)); + return toString(text); + } + + private static String toString(Textifier text) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + text.print(pw); + pw.flush(); + return sw.toString(); + } }