Pull to refresh

Comments 10

Элегантно решить не получится, т.к. кодогенерация — это костыль для языка. Различные фреймворки используют кодогенерацию для подмешивания в классы специфической функциональности. Яркий пример — JPA. EclipseLink умеет делать как статичную трансформацию во время компиляции (AST), так и динамическую трансформацию во время выполнения (Agent). Преимущественно должен использоваться второй способ, т.к. иначе генерируемый код является фреймворкозависимым и не может быть использован в другом приложении: например если я хочу сериализовать JPA-объекты и пересылать их клиенту, который знать не знает о JPA. То есть именно в зависимости от рантайма должны делаться те или иные преобразования.
Spoon не компилирует сам, а использует eclipse. Но от этого не легче, потому что в эклипсе тонны багов
Спасибо, интересно) Можно подробнее про тонны багов!?
Из того что я видел — это неоднозначно трактуемые части java lang spec, где то как себя ведет javac считается мейнстримом. Баги есть у любого компилятора. Но при всей открытости OpenJDK, javac нет в виде отдельного артефакта в репозитарии, а ejc — есть
У меня было 2 или 3 случая, когда ошибки возникали на совершенно невинных Java-конструкциях, например assert, помогало только их изменение или удаление. Впрочем, возможно, это были баги интеграции Spoon и eclipse. Плюс к паре паре более идентифицированных случаев, когда они сказали «won't fix» или даже что-то исправили.
А почему ECJ сразу не стали пробовать? Он вроде прост как 5 копеек
В смысле — пробовать ECJ? Напрямую использовать? Ну, наверное с ним нельзя сделать все те трансформации, построение AST и pretty printing, который можно со spoon, иначе зачем этот проект существует. ecj это безальтернативный бекенд в Spoon. В предыдущем комментарии я употребил «eclipse» как синоним ecj.
pretty printing точно не работает, тут вы правы.
AST строится и даже дополнительно может разрешать типы идентификаторов
Там еще есть удобная (для меня) вещь — фильтрация всего дерева одним махом лямбдой.

В целом качество проекта и кода у них могло быть и лучше, но радует что идет живое развитие и оперативно реагируют на баг-репорты. Да и альтернатив особо нет. Раньше пробовал github.com/phax/jcodemodel, даже сделал туда CSE оптимизацию, но это вообще слабый проект
Sign up to leave a comment.

Articles