所以我遇到了
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
,它将所有 super 调用包装在try-catch block 中,并在异常捕获时报告正在处理的方法,但因为它是ClassWriter
的toByteArray
方法抛出错误,而用于遍历字节码的MethodVisitor
被创建为其中的局部变量,我还没有想到了解如何插入它。无法覆盖 toByteArray
方法,因为它似乎访问类私有(private)字段并且简单地复制失败,因为我也非常需要复制包的其余部分。
我还没有尝试检测 ClassWriter
本身,但在开始之前,我想知道是否有更合理的方法来找出哪个方法太大。
最佳答案
仅供引用,this commit添加一个包含此信息的新异常。 6.2.1 已经发布。
关于java - 识别 `` 方法代码太大``起源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151987/