From d688f15a530cbfaae487bc918b2727895fff0b01 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Mon, 29 Dec 2025 15:49:07 +0200 Subject: Get rid of unsupported JSR/RET --- .../AddFramesIfNecessaryClassProvider.java | 2 +- .../classprovider/JSRInlinerClassAdapter.java | 23 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 enigma/src/main/java/cuchaz/enigma/classprovider/JSRInlinerClassAdapter.java (limited to 'enigma/src/main/java/cuchaz') diff --git a/enigma/src/main/java/cuchaz/enigma/classprovider/AddFramesIfNecessaryClassProvider.java b/enigma/src/main/java/cuchaz/enigma/classprovider/AddFramesIfNecessaryClassProvider.java index d6e4ec7..f976709 100644 --- a/enigma/src/main/java/cuchaz/enigma/classprovider/AddFramesIfNecessaryClassProvider.java +++ b/enigma/src/main/java/cuchaz/enigma/classprovider/AddFramesIfNecessaryClassProvider.java @@ -40,7 +40,7 @@ public class AddFramesIfNecessaryClassProvider implements ClassProvider { } IndexClassWriter cw = new IndexClassWriter(entryIndex, ClassWriter.COMPUTE_FRAMES); - clazz.accept(cw); + clazz.accept(new JSRInlinerClassAdapter(cw)); ClassReader cr = new ClassReader(cw.toByteArray()); ClassNode node = new ClassNode(); cr.accept(node, 0); diff --git a/enigma/src/main/java/cuchaz/enigma/classprovider/JSRInlinerClassAdapter.java b/enigma/src/main/java/cuchaz/enigma/classprovider/JSRInlinerClassAdapter.java new file mode 100644 index 0000000..5135b72 --- /dev/null +++ b/enigma/src/main/java/cuchaz/enigma/classprovider/JSRInlinerClassAdapter.java @@ -0,0 +1,23 @@ +package cuchaz.enigma.classprovider; + +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.commons.JSRInlinerAdapter; + +public class JSRInlinerClassAdapter extends ClassVisitor { + public JSRInlinerClassAdapter(ClassVisitor cv) { + super(Opcodes.ASM9, cv); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); + + if (mv != null) { + mv = new JSRInlinerAdapter(mv, access, name, descriptor, signature, exceptions); + } + + return mv; + } +} -- cgit v1.2.3