Мне интересно метапрограммирование (т.е. программы, которые помогают программистам выполнять утомительные задачи программирования). Я ищу инструмент, который обладает следующими свойствами:
- можно использовать как во время компиляции, так и во время выполнения;
- проверяет структуру программы;
- может добавлять новые классы, методы или поля и делать их видимыми для компилятора Java;
- может изменять поведение методов;
- Java-based (ну, Java - самый популярный язык программирования в соответствии с некоторыми рейтингами);
- хорошая интеграция с IDE и создание таких инструментов, как Ant, Gradle или Maven;
- активно поддерживаемый проект;
- проста в использовании и распространяется;
Для этого есть несколько решений, например:
- отражение
- AspectJ
- Инструмент обработки аннотаций
- манипуляция bytecode (CGLIB, Javassist, java.lang.instrument)
- Eclipse JDT
- Проект Ломбок
- Groovy, JRuby, Scala
Но, к сожалению, ни один из них не отвечает всем вышеперечисленным критериям. Есть ли полное решение метапрограммирования для Java?