LINUX.ORG.RU

Генерация джава кода - что использовать, с чего начать

 , ,


0

2

Привет! Нужно сгенерить джава код по шаблону, нужно распарсить существующие джава классы(DTO) и на их основе сгенерить новый класс, который будет использовать существующие методы. Кто сталкивался с такой задачей - какие подводные камни, какие инструменты лучше использовать, есть ли примеры(быстрый гуглинг удобоваримых примеров не дал)?

В принципе можно быстро написать парсер на питоне, но вдруг есть более подходящие инструменты?

Задача как я ее вижу: 1) Распарсить геттеры/сеттеры класса и принимаемые значения 2) Сгенерить свои методы основываясь на этой инфе(имя и возвращаемые значения) 3) Если встречаем в field тип из нашего пакеджа - рекурсивно генерим еще один класс



Последнее исправление: by_zero (всего исправлений: 2)

Не понял, ты хочешь парсить .java файлы, чтобы потом из инстанса класса читать значения полей? Если это действительно так, то тут обычным рефлекшеном в рантайме можно обойтись, без парсеров.

orm-i-auga ★★★★★
()
Последнее исправление: orm-i-auga (всего исправлений: 1)

Нужно сгенерить джава код по шаблону, нужно распарсить существующие джава классы(DTO) и на их основе сгенерить новый класс

это тебе дебилу кажется, что это нужно. нормальную бизнесовую задачу озвучь, а не свои ламерские фантазии

anonymous
()

В первую очередь надо использовать reflection/proxy. Скорее всего тебе его хватит. Если вдруг не хватит, надо парсить байткод (а не исходный код, это маразм) и генерировать байткод. Для парсинга байткода могу порекомендовать библиотеку asm. Но, ещё раз напишу, это в самом крайнем случае, в 99.9% случаев reflection/proxy хватит.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Если вдруг не хватит, надо парсить байткод (а не исходный код, это маразм) и генерировать байткод.

Тогда все будет завязано на байткод hotspot, а в будущем он может стать ненужным.

Anatolik ★★
()

Я жавы не знаю, но на 99,98% уверен, что всю информацию о типах, свойствах, методах, полей, жава хранит в рантайме и всем этим можно в рантайме крутеть-вертеть.

nikolnik ★★★
()

Опиши реальную задачу на хрена тебе такой геморой. Потом обсудим решение этой задачи, может тут очередной оверинжиниринг.

foror ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.