如何在Tree API中使用ASM AdviceAdapter?

时间:2013-06-24 10:22:26

标签: java bytecode java-bytecode-asm

我想知道是否可以在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

0 个答案:

没有答案