java 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 楼答案
不幸的是,没有。如果查看source code of a ASM ^{} ,可以看到
SKIP_CODE
属性被解释一次,然后存储在局部变量中。因此,即使反射地更改标志,也可以跳过所有方法或不跳过任何方法。但是,通过从visitMethod
返回null
,可以指示不要完全解释方法