Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

ASM4の新機能一覧 日本語訳(〜RC2)

私が好きなバイトコード操作ライブラリであるASMが、Java7対応の新バージョンを開発しています。まだ情報が少ないのですが、MLの投稿をもとに新機能をまとめてみました。今後実際に使って気づいたことがあれば追記します。

Java7対応(RC1〜)

Java7ではバイトコードのフォーマットにいくつかの変更が含まれているので、従来のバージョンでは対応できません。

invokedynamicに関するオーバーホール(RC1〜)

invokedynamicによるメソッド呼び出しは従来使われていたMethodVisitor.visitMethodInsn(int opcode, String owner, String name, String desc)ではなくvisitInvokeDynamicInsn(String name, String desc, Handle bootstrpMethod, Object... args)メソッドによって行うようになりました。RC1のものですが、サンプルコードがjsr292 cookbookに含まれています

新しい定数型(RC1〜)

invokedynamicするための定数型としてorg.objectweb.asm.MethodHandleとorg.objectweb.asm.MethodTypeが追加されました。java.lang.invoke.MethodHandleとの衝突を避ける*1ためか、RC2からはorg.objectweb.asm.Handleとorg.objectweb.asm.Typeにリネームされています。

総称型の導入(RC1〜)

APIに総称型が導入されました。例えばAnalyzerクラスはClass Analyzer<V extends Value>として定義されています。
ただしjarからは総称型に関する情報をそぎ落としてあるため、従来通りJRE1.2でも動作するとのことです。開発時に総称型の恩恵を得るには、情報を落としていないasm-debug-all-*.jarを使う必要があります。

〜Visitorインタフェースを抽象クラスに変更(RC2〜)

インタフェースとして提供されていたClassVisitorやMethodVisitorが、抽象クラスとして提供されるようになりました。ClassAdapterやMethodAdapterの機能もVisitorにマージされたため、Adapterクラスは無くなっています。

その他(RC2〜)

  • ClassWriter#getCommonSuperClass()の改善
  • CheckClassAdapterに新しいチェック機能を追加
  • バグ修正

*1:http://mail.ow2.org/wws/arc/asm/2011-04/msg00035.html