ASM 跳过某些方法的代码
ASM Skip Code for some Methods
有没有办法告诉 ASM 我不想使用特定方法的SKIP_CODE
选项?例如,如果我有一个非常大的 class 像这样:
public class Large
{
public void doManyThings() { /* ... */ }
public void methodWithLongBytecode() { /* ... */ }
public @inline void inlinableMethod() { /* ... */ }
}
我的编译器在不需要代码的方法上花费了大量时间,因为它们无论如何都无法内联。但是,我仍然希望能够读取 inlineableMethod
以便编译器可以将其字节码内联到调用方中。有没有办法在 class 使用 ASM 5.0.3 读取期间临时 'disable' SKIP_CODE
标志?
很遗憾,没有。如果查看 source code of a ASM ClassReader
,您会发现 SKIP_CODE
属性被解释一次,然后存储在局部变量中。因此,即使通过反射性地更改标志,您也可以跳过所有方法或不跳过任何方法。但是,通过从 visitMethod
返回 null
,您可以指示完全不解释方法。
有没有办法告诉 ASM 我不想使用特定方法的SKIP_CODE
选项?例如,如果我有一个非常大的 class 像这样:
public class Large
{
public void doManyThings() { /* ... */ }
public void methodWithLongBytecode() { /* ... */ }
public @inline void inlinableMethod() { /* ... */ }
}
我的编译器在不需要代码的方法上花费了大量时间,因为它们无论如何都无法内联。但是,我仍然希望能够读取 inlineableMethod
以便编译器可以将其字节码内联到调用方中。有没有办法在 class 使用 ASM 5.0.3 读取期间临时 'disable' SKIP_CODE
标志?
很遗憾,没有。如果查看 source code of a ASM ClassReader
,您会发现 SKIP_CODE
属性被解释一次,然后存储在局部变量中。因此,即使通过反射性地更改标志,您也可以跳过所有方法或不跳过任何方法。但是,通过从 visitMethod
返回 null
,您可以指示完全不解释方法。