「登録された」イベント ハンドラ クラスのリスナー メソッドを呼び出してイベントをディスパッチするイベント ディスパッチャ クラスを持つゲーム エンジン/ライブラリを作成しています。適切なディスパッチャー メソッドを呼び出すことで、イベント ハンドラー/リスナーをイベント ディスパッチャーに登録できます。
これは明らかに、すべてのイベント ハンドラーを登録するためのボイラープレート コードにつながります (また、私のエンジンの他の側面にも同様のボイラープレート コードがあります)。そのため、コーディング中にイベント ディスパッチャに明示的に登録する必要はありません。プログラムの実行時に、ディスパッチャの register メソッドの呼び出しが自動的に追加されます。
インストルメンテーションを使用するには、何らかのバイトコード修飾子 API を使用する必要があることを理解しています。ASM と BCEL の 2 つを知っています。どちらを使用する必要がありますか? 明らかに、これは私が行おうとしているやや単純なタスクであるため、学習しやすく、より適切に文書化されたタスクが必要です。
編集:これは具体的な例です。
元のイベント ハンドラ クラス:
@Handler //indicates this this class should be transformed
public class MouseEventHandler implements EventHandler<MouseEvent>
{
//hidden default constructor
public void handleEvent(MouseEvent event)
{ ... }
}
変換後:
@Handler
public class MouseEventHandler implements EventHandler<MouseEvent>
{
public MouseEventHandler()
{
//add this line of code to default constructor
Game.getEventDispatcher().addEventHandler(this);
}
public void handleEvent(MouseEvent event)
{ ... }
}