所以我遇到了
MY: WARNING cannot transform class XYZ
java.lang.RuntimeException: Method code too large!
at org.objectweb.asm.MethodWriter.a(Unknown Source)
at org.objectweb.asm.ClassWriter.toByteArray(Unknown Source)
at ...
我知道Method code too large! exception using ASM和the project it links to。
但是,我已经提供了ASM的修改版本,因此,使用该项目并不是一个真正的选择。
这将要求我手动分解违规方法。值得庆幸的是,这恰好发生在一个库类(到目前为止--.-)所以它应该是可管理的。
我想检测并报告过大的方法。所以我可以更容易地确定我必须拆分。 (坦率地说,我不明白为什么默认情况下不会提供此错误的原因。)
我已经编写了一个MethodVisitor
,它包含try-catch块中的所有超级调用,并且异常捕获报告正在处理的方法,但因为它是ClassWriter
抛出错误的toByteArray
方法,用于遍历字节码的MethodVisitor
被创建为其中的局部变量,我还没想出如何插入它。无法覆盖toByteArray
方法,因为它似乎访问类私有字段而只是复制失败,因为我几乎也需要复制包的其余部分。
我还没有试过检测ClassWriter
本身,但是在去那里之前,我想知道是否有更合理的方法来确定哪种方法太大了。