Мне было интересно, есть ли уже библиотека для программной записи класса или метода Java?
Я ищу библиотеки, способные записывать новый исходный код в существующие файлы или расширять уже существующие файлы.
Мне было интересно, есть ли уже библиотека для программной записи класса или метода Java?
Я ищу библиотеки, способные записывать новый исходный код в существующие файлы или расширять уже существующие файлы.
Посмотрите Eclipse JDT.
Eclipse Java Development Tools (JDT) предоставляет API-интерфейсы для доступа и использования исходного кода Java. Он позволяет получать доступ к существующим проектам в рабочей области, создавать новые проекты и изменять и читать существующие проекты.
В частности, вы можете создавать новые элементы Java, например. проектов, пакетов, классов с использованием Java Model API, а затем вы можете создавать/изменять содержимое типа, например. методы, инструкции через AST (Абстрактное дерево синтаксиса)
Что вы хотите, это система преобразования программ. Такие инструменты читают исходный код, строят структуры данных компилятора, позволяют кодировать пользовательские анализаторы/преобразования на этих структурах и выплевывать исходный код, соответствующий структурам данных компилятора; это дает вам возможность "расширить файл". Создание нового кода выполняется путем простого создания соответствующих структур данных компилятора, а затем выплескивания соответствующего кода.
Наш DMS Software Reengineering Toolkit - именно такая система. Он читает источник Java, строит структуры данных компилятора, такие как абстрактные деревья синтаксиса и таблицы символов (он может создавать графики потока управления, деревья вызовов и потоки данных), позволяет вам перебирать эти структуры с процедурным кодом или писать "источник-источник" преобразования ", используя поверхностный синтаксис языка (в данном случае Java), а затем он может генерировать действительный код Java из этих структур данных компилятора.
Он был использован для реализации различных инструментов анализа и преобразования Java, которые вы можете увидеть на веб-сайте. Самый простой способ понять - с помощью программных преобразований для создания инструмента для тестирования.
Apache Byte Code Engineering Library очень интересно работать, хотя это не то же самое, что манипуляция с исходным кодом Java.
Однако вы можете использовать его для:
Пользовательские языки, предназначенные для JVM (например, Scala), часто используют манипуляции с байт-кодом для создания классов Java.
С некоторыми усилиями вы можете расширить эту библиотеку, чтобы выполнить "мета-программирование": запись исходного кода Java во время выполнения.