Редактирование/Изменение .java файла программно? (не .class файл)

Так, вот является часть использования кода CodeModel, который генерирует код Java:

    JCodeModel cm = new JCodeModel();
    JDefinedClass dc = cm._class("foo.Bar");
    JMethod m = dc.method(0, int.class, "foo"); 
    m.body()._return(JExpr.lit(5));
    File f = new File("C:/target/classes");
    f.mkdirs();
    cm.build(f);

Этот код генерирует .java файл:

package foo;
public class Bar {

       int foo() {
        return  5;
    }
}

Однако я НЕ хочу, чтобы CodeModel создал новый файл Java для меня. Я уже действительно имею .java файл и хотел бы добавить несколько строк кода к методу в нем. Так, я хотел бы, чтобы API изменил файл Java непосредственно/, создают измененную копию его. Существует ли путь к выполнению этого?

13
задан JasonMArcher 28 June 2015 в 21:12
поделиться

2 ответа

Вам нужна система преобразования программ . Это инструмент, который анализирует ваш исходный файл и может применять преобразования для его изменения, а также регенерировать исходный код с изменениями.

Система преобразования источника в источник принимает правила вида:

lhs -> rhs  if cond

где lhs и rhs являются исходными шаблонами для допустимых фрагментов языка, а cond проверяет безопасность применения правила. (Рассмотрим «? X /? X -> 1, если? X ~ = 0»; вам нужно условие, чтобы убедиться, что деление допустимо).

Одним из таких инструментов является наш DMS Software Reengineering Toolkit . DMS имеет полные C, C ++, C #, Java, COBOL, Python, PHP и анализаторы интерфейса ECMAScript (как и многие менее известные языки) и может применять такие правила напрямую. DMS также обеспечивает построение таблиц символов и управление ими, а также анализ потока данных, так как они часто полезны при определении cond для сложных правил. При желании вы также можете вернуться к «стандартному» процедурному интерфейсу для посещения узлов дерева и изменения AST.

-1
ответ дан 2 December 2019 в 00:31
поделиться

Вам действительно понадобится полный синтаксический анализ кода, который вы хотите изменить, чтобы убедиться, что вы вставляете код в правильное расположение. Я бы подумал, что лучше всего будет использовать существующий инструмент синтаксического анализа, который позволяет переписывать код, а не пытаться сделать что-то вручную.

Eclipse IDE делает что-то подобное для поддержки рефакторинга кода. Эта статья может быть полезной.

2
ответ дан 2 December 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: