Преобразователь класса в JAVA ASM - можно ли его сгенерировать?

Я хотел бы начать использовать Java ASM для преобразования классов в моем проекте - добавить один аргумент String к некоторым методам и отправить журнал с этим аргументом.

На сайте asm я прочитал

Если вы хотите реализовать преобразователь класса, напишите два исходных файла Java (до и после преобразования) и используйте представление сравнения плагина в режиме ASMifier, чтобы сравнить эквивалентный код ASM.

Но я нахожу использование Java ASM чрезвычайно сложным. Есть ли инструмент, который может генерировать class transformer? Было бы очень полезно!


person alicjasalamon    schedule 14.08.2012    source источник


Ответы (2)


Если вы используете Eclipse, вам следует установить Bytecode Outline — он вызывает ASMifier (упомянутый Peter Lawry в другом ответе) и предоставляет представление, которое может проверять каждый класс или метод.

РЕДАКТИРОВАТЬ (скопировано из моего комментария ниже)
Чтобы добраться до нужного преобразователя, выполните следующие действия: напишите пример метода, скопируйте код для его создания (который вы получите, щелкнув значок с "ASM" на нем), измените его исходники на то, что вы хотите, чтобы он был после преобразования, скопируйте его вывод, поместите их в программу сравнения (мне нравится и рекомендую Рассеянный). Посмотрите, что изменилось в коде ASM, примените это в своем преобразователе ASM.

person Arne    schedule 22.08.2012
comment
Я использую Bytecode Outline. Он может сравнивать байтовые коды, но не может генерировать трансформатор. - person alicjasalamon; 22.08.2012
comment
напишите пример метода, скопируйте код для его создания (который вы получите, щелкнув значок с ASM), измените его исходные коды на то, что вы хотите, чтобы он был после преобразования, скопируйте его вывод, поместите их в программу сравнения (я нравится и рекомендую Diffuse). Посмотрите, что изменилось в коде ASM, примените это в своем преобразователе ASM. - person Arne; 22.08.2012

Взгляните на класс ASMifier. . Это можно использовать для генерации кода для создания байтового кода. http://asm.ow2.org/doc/tutorial.html

Вы можете найти другие инструменты, такие как Javassist или BCEL, более простыми для простых задач.

person Peter Lawrey    schedule 14.08.2012
comment
Я слышал, что ASM имеет лучшую документацию и является самым простым. Вы рекомендуете Javassist или BCEL? - person alicjasalamon; 14.08.2012
comment
Для простых вещей я бы рассмотрел это. Я использовал только ASM, но моим первым языком был ассемблер в течение двух лет. ;) - person Peter Lawrey; 14.08.2012