我想知道是否可以在ASM树API中使用AdviceAdapter
。
我尝试了以下操作,但堆空间内存不足。
@Override
public void modify(ClassReader cr, ClassWriter cw) throws Exception
{
ClassNode cn = new ClassNode();
cr.accept(cn, 0);
instrumentTestcases(cn);
cn.accept(cw);
}
@SuppressWarnings("unchecked")
private void instrumentTestcases(ClassNode cn)
{
for (MethodNode methodNode : (List<MethodNode>) cn.methods)
{
if (isTestMethod(methodNode))
{
TestModeAdapter adapter = new TestModeAdapter(methodNode, methodNode.access, methodNode.name, methodNode.desc);
methodNode.accept(adapter);
}
}
}
类TestModeAdapter
继承AdviceAdapter
并在方法的开头和结尾添加一条简单的指令。如果我在ClassVisitor
的{{1}}方法中使用适配器,则修改成功。
我的代码是否不正确或者适配器只能与核心API一起使用?
修正案:visitMethod
(扩展TestModeAdapter
)
AdviceAdapter