我正在使用ASM 4.1。我知道该方法visitLdcInsn需要版本49或更高版本,但是我想知道如何使visitLdcInsn与版本49或更低版本一起使用。我知道一个解决方案是让人们使用更高版本进行编译,但是我认为这不是向人们建议的合适解决方案。这是一些测试代码,当我尝试检测时会得到异常:
package mypackage;
public class JDK4TEST {
public static void main(String[] args) {
}
}
我得到以下异常:
线程“主”中的异常java.lang.VerifyError :(类:mypackage / JDK4TEST,方法:__cobertura_classmap签名:(Lnet / sourceforge / cobertura / coveragedata / LightClassmapListener;)V)常量池中的类型非法
如果需要更多代码,则这是github上cobertura 2.0代码的一部分。
最佳答案
visitLdcInsn
方法从一开始就存在,但是某些可接受的参数类型取决于类格式版本,例如对于类格式51.0和更高版本,Type
和Handle
值是可接受的。请参见corresponding JavaDoc。
另请注意,ASM的ClassWriter
不会检查生成的字节码的有效性。您需要在ClassWriter
之前将CheckClassAdapter添加到访问者链中。