Могу ли я генерировать как байт-код Java, так и исходный код, используя один и тот же «генератор» с ASM? - PullRequest
2 голосов
/ 26 марта 2012

Мой Google Foo подводит меня. Если у меня есть какая-то инфраструктура, которая может выполнять генерацию кода на основе аннотаций, и я хотел бы поддержать генерацию кода source во время сборки, чтобы разработчик мог скомпилировать ее заранее, также посмотрите, что генерируется, и, возможно, даже изменить код, но также предложить генерацию байт-кода времени выполнения для более динамичных приложений, например приложений на основе плагинов, могу ли я использовать ASM для обеих задач или мне действительно нужно программировать это дважды, с две разные библиотеки? Если это возможно, будет приветствоваться ссылка на пример.

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Хотя это не дает прямого ответа на вопрос, я рекомендую использовать Javassist поверх ASM.

С Javassist вы начинаете с генерации исходного кода и просто даете его компилятору Javassist для превращения в байт-код, так что теперь у вас есть оба варианта без каких-либо дополнительных уловок. Плюс, IMHO, генерация исходного кода для Javassist НАМНОГО проще, чем возиться с байт-кодом и ASM.

1 голос
/ 26 марта 2012

Для генерации кода во время сборки я рекомендую использовать Java-компилятор eclipse, у которого нет открытого API для этого, но который на самом деле очень прост в использовании. Вы можете посмотреть, как вы можете использовать его здесь: http://git.jetbrains.org/?p=mps/mps.git;a=tree;f=core/kernel/source/jetbrains/mps/compiler;h=6787147e3b36899574f042dd2132a4c08963670e;hb=HEAD (Этот код был написан в основном мной). Также есть пример того, как вы можете динамически загружать скомпилированные классы (внутренний класс MyClassLoader).

...