0

ASM 4.1 を使用しています。メソッド visitLdcInsn にはバージョン 49 以降が必要であることは理解していますが、visitLdcInsn をバージョン 49 以下で動作させるにはどうすればよいか疑問に思っています。人々がより高いバージョンでコンパイルすることが解決策であることは知っていますが、それが人々に提案する適切な解決策であるとは思いません。インストルメントしようとすると例外が発生するテストコードを次に示します。

package mypackage;
 public class JDK4TEST {
  public static void main(String[] args) {
  }
 }

次の例外が発生します: Exception in thread "main" java.lang.VerifyError: (class: mypackage/JDK4TEST, method: __cobertura_classmap signature: (Lnet/sourceforge/cobertura/coveragedata/LightClassmapListener;)V) Illegal type in constant pool

さらにコードが必要な場合、これは github の cobertura 2.0 コードの一部です。

4

1 に答える 1

2

メソッドは最初からありましたvisitLdcInsnが、受け入れられるパラメーターの型の一部はクラス形式のバージョンに依存します。たとえばTypeHandle値はクラス形式 51.0 以降で受け入れられます。対応する JavaDocを参照してください。

ClassWriterまた、ASMは生成されたバイトコードの有効性をチェックしないことに注意してください。の前にCheckClassAdapterをビジターのチェーンに追加する必要がありますClassWriter

于 2013-06-13T13:56:04.333 に答える