Java 使用ASM将两个方法合并为一个

Java 使用ASM将两个方法合并为一个,java,java-bytecode-asm,Java,Java Bytecode Asm,我正在尝试将两个方法a()和b()指令合并为一个方法c(),该方法是我通过新建MethodNode() 在asm中有没有一种不破坏行号、标签等的简单方法 在读取类时,简单地将两者的指令添加到一个insnlist中似乎会导致问题创建一个新的方法c,该方法只需逐个调用a和b,不是更容易吗?我希望做你想做的事情是非常重要的,因为你必须确保验证器接受结果,这可能会很棘手。方法代码的执行不允许在最后从代码中脱落。因此,有效的指令序列总是以返回指令、athrow或向后的goto结束。向这样的序列追加另一个指

我正在尝试将两个方法
a()
b()
指令合并为一个方法
c()
,该方法是我通过
新建MethodNode()
在asm中有没有一种不破坏行号、标签等的简单方法


在读取类时,简单地将两者的指令添加到一个insnlist中似乎会导致问题

创建一个新的方法
c
,该方法只需逐个调用
a
b
,不是更容易吗?我希望做你想做的事情是非常重要的,因为你必须确保验证器接受结果,这可能会很棘手。方法代码的执行不允许在最后从代码中脱落。因此,有效的指令序列总是以返回指令、
athrow
或向后的
goto
结束。向这样的序列追加另一个指令序列只会创建无法访问的代码。我想,您不是手工计算stackmap帧,因为这需要了解这些问题。如果不使用
COMPUTE\u FRAMES
选项,由于缺少初始堆栈帧,代码将无效。当您使用它时,ASM将用
nop
s替换无法访问的代码,因为它无法预测其初始值简言之,您无法简单地连接指令序列。您需要将第一条返回指令替换为第二条指令序列。所有这些都假设您正在谈论无参数的
void
方法,否则,事情就复杂得多。