我目前正在尝试使用ASM树API在方法中间插入一个框架作为未来的跳转目标。
我尝试使用Analyzer
类来计算方法中的堆栈和变量大小:
Analyzer<BasicValue> analyzer = new Analyzer<>(new BasicInterpreter());
analyzer.analyze(className, methodNode);
Frame<BasicValue>[] frames = analyzer.getFrames();
据我了解,帧的索引对应于方法中指令的索引。
我的问题是这些帧不存储创建可插入方法的FrameNode所需的信息;它们似乎只包含局部变量/堆栈大小的计数,但F_FULL需要所有类型和操作码的完整列表。
我知道ClassWriter + COMPUTE_FRAMES可以解决我的问题,但是我不愿意使用它,因为我必须为我想要转换的每个文件加载整个类路径。我目前希望这不是我唯一的选择,但ASM javadocs似乎没有答案。
有没有办法在ASM方法中为任意指令创建FrameNode
?
编辑:或者在没有加载类路径的情况下有没有正确的COMPUTE_FRAMES方法?