2011-10-15 3 views
2

は、実行時に ハイレベルのバイトコードエディタはありますか?

object Foo { 
    var functions: List[String => String] = Nil // can be any type to any type. 
    def addFunc(f:String => String) = functions = f :: functions 
} 

Scalaの

に以下の私が持っていると仮定し、私は与えられていますいくつかの機能を持つ Fooが追加されました。私は今、Scalaで、次のようなものを実装する新しいの.classファイルを作成したい:

object MyObject { 
    def process1(s:String) = // call Foo.functions(1) 
} 

私はその後、Fooがない場合でも、後で実行することができますバイトコードでMyObjectを保存したいです。

上記は私がしたいことを示すための一例です。私はMyObjectprocess1という名前を与えられており、実行可能ファイルMyObject.classを生成する必要があります。 MyObjectのソースは必要ありません(Javaソースであった可能性もあります)。

したがって、高いレベルでは、メモリ「スナップショット」をFoo.function(1)とし、そのスナップショットをバイトコードに変換して格納し、これを使用してバイトコードMyObjectを生成する必要があります。私が見つけた

すべてのバイトコードエンジニアリングライブラリはあまりにも低レベルなので、私はなど

答えて

6

あなたは木を見てきました関数などの抽象オブジェクトを扱うことができます、より高いレベルのライブラリがある場合、私は思っていましたモデルASM?以前はイベントモデルしか使用していませんでしたが、ツリーは探しているもののように聞こえます。 ASM user guideのセクション1.2.2に概要があります(PDF - HTMLバージョンはないと思いますが、リンクしています)。

+0

Asmは、最も高いレベルのオープンソースのバイトコードエディタのようです。まだかなり低レベルですが、行う必要があります。 – Jus12

0

ASMフレームワークもお勧めします。 ASMにcommon bytecode transformation patternsを実装することに関するAOSD'07の論文があります。 2つのクラスを1つにマージするセクションとバイトコードの変換をあなたのごく近似する「インラインメソッド」セクション。

関連する問題