某些方法的ASM跳过代码

时间:2015-05-19 15:24:52

标签: java java-bytecode-asm

有没有办法告诉ASM我想要对特定方法使用SKIP_CODE选项?例如,如果我有一个非常大的类:

public class Large
{
    public void doManyThings() { /* ... */ }

    public void methodWithLongBytecode() { /* ... */ }

    public @inline void inlinableMethod() { /* ... */ }
}

我的编译器花了很多时间在不需要代码的方法上,因为它们无论如何也无法内联。但是,我仍然希望能够读取inlineableMethod,以便编译器可以将其字节码内联到调用者中。有没有办法在课堂阅读期间使用 ASM 5.0.3 临时“禁用”SKIP_CODE标志?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有。如果查看source code of a ASM ClassReader,可以看到SKIP_CODE属性被解释一次,然后存储在局部变量中。因此,即使通过反射改变标志,您也可以跳过所有方法或不跳过方法。但是,通过从null返回visitMethod,您可以指示不完全解释方法。