diff --git a/src/main/java/de/maishai/typedast/LoggingMethodVisitor.java b/src/main/java/de/maishai/typedast/LoggingMethodVisitor.java index 5e4b2c1..7d7870a 100644 --- a/src/main/java/de/maishai/typedast/LoggingMethodVisitor.java +++ b/src/main/java/de/maishai/typedast/LoggingMethodVisitor.java @@ -1,15 +1,31 @@ package de.maishai.typedast; +import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import java.util.HashMap; +import java.util.Map; + public class LoggingMethodVisitor extends MethodVisitor { + private final Map labelNames = new HashMap<>(); + private int labelCounter = 0; public LoggingMethodVisitor(MethodVisitor methodVisitor) { super(Opcodes.ASM9, methodVisitor); System.out.println("\n--- Visiting Method ---"); } + private String getLabelName(Label label) { + return labelNames.computeIfAbsent(label, k -> "label" + labelCounter++); + } + + @Override + public void visitJumpInsn(int opcode, Label label) { + System.out.println("visitJumpInsn: " + opcodeToString(opcode) + ", " + getLabelName(label)); + super.visitJumpInsn(opcode, label); + } + public static String opcodeToString(int opcode) { for (java.lang.reflect.Field field : Opcodes.class.getDeclaredFields()) { try { @@ -72,6 +88,13 @@ public class LoggingMethodVisitor extends MethodVisitor { super.visitIntInsn(opcode, operand); } + @Override + public void visitLabel(Label label) { + String labelName = getLabelName(label); + System.out.println("visitLabel: " + labelName); + super.visitLabel(label); + } + @Override public void visitLdcInsn(Object value) { System.out.println("visitLdcInsn: " + value);