Как программно изменить исходный код Java

Мне понадобится возможность программно изменять исходный код Java, в частности применять рефакторинг. Например, перемещение метода из одного класса в другой, изменение модификатора доступа с общедоступного на частный и т. д.

Теперь в C# я бы, вероятно, выбрал абстрактное дерево синтаксиса / подход Roslyn, но я понятия не имею, с чего начать в Java.

Учитывая файл исходного кода java, как его проанализировать, чтобы можно было внести изменения, а затем сохранить в нем?

Похоже, это просто чтение файла. Я не собираюсь просто читать в java-файле и искать определенные строки (например, общедоступный метод void). Мне нужно не только прочитать файл, но, предположительно, проанализировать его в AST?

Tyler Ross 29.03.2018 07:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
2
634
1

Ответы 1

Первый: Подобные вещи (называемые рефакторинг) уже обрабатываются хорошей Java IDE (Eclipse, IntelliJ IDEA, NetBeans и другие названия). Я действительно считаю, что подобные вещи должны выполняться в среде IDE.

Второй: Если вы действительно хотите редактировать файлы программно, имейте в виду, что вы тот, кто отвечает за формат и синтаксис. Вы должны прочитать файлы, отредактировать их (вырезать, вставить или добавить код в нужную строку) и сохранить их. Ссылка, предоставленная с VedX, - хорошее начало для базового ввода-вывода. Но есть еще много чего, что нужно отслеживать.

Я сделал нечто подобное с OpenEdge ABL, и это непростая задача (вы обнаружите, что что-то пошло не так, о чем вы никогда не думали, и если вы не сделали резервную копию своего кода, он испорчен). Я сделал это, но, в конце концов, это был не лучший компромисс между временем, потраченным на то, чтобы сделать это, и реальной полезностью (мне просто понадобилось около 4 раз для примерно 1500 файлов).

Наконец (после того, как я потерял много часов, изобретая колесо рефакторинга), я написал несколько генераторов классов, которые писали совершенно новый файл каждый раз, когда мне нужно было что-то изменить - наконец, я только изменил генераторы классов (возможно, это то, о чем вы не подумали и тоже подходит). Теперь он автоматизирован, универсален и может работать параллельно (то, для чего OpenEdge не предназначен - хорошо, это дешевый взлом с моей стороны).

В третьих: Возможно, есть пакет, который вы можете использовать в своем проекте Java. Я бы попробовал погуглить. Моя первая попытка привела к следующему: http://www.methodsandtools.com/archive/archive.php?id=4 для первого понимания, что это такое и что нужно учитывать.

Я думаю, что ANTLR (antlr.org/api/JavaTool/index.html) станет решением. Я вижу, что у них есть грамматика Java, и они позволяют вам проходить AST.

Tyler Ross 29.03.2018 15:24

Другие вопросы по теме