Статьи

Представляем Picocog: облегченная библиотека генерации кода

Picocog — это легкая и новая библиотека Java с открытым исходным кодом, созданная для упрощения создания программного кода.

Генерация кода — это процесс, с помощью которого исходный код может автоматически генерироваться на основе входных данных.

Генерация кода обычно работает следующим образом:

  • Определите модель / используйте существующую модель.
  • Опросить модель и сгенерировать исходный код
  • После изменения модели обновите исходный код.

Простые старые объекты Java

Генератор кода, разработанный для использования Picocog, обычно использует  модель POJO в качестве источника данных модели.

Пример модели POJO показан ниже (для краткости опущены геттеры / сеттеры).

Образец модели POJO

Эта модель POJO обычно создается из следующих типов источников:

  • JSON / XML / YAML / CSV
  • Через запрос к базе данных
  • DSL (доменные языки)

Например:

XML представление модели

ПРИМЕЧАНИЕ . Важно, чтобы при создании модели POJO выполнялся полный набор проверок и проверялись предположения. Схема XML или реализация DSL на заказ могут обеспечить ссылочную целостность и другие проверки.

Генерация кода

Picocog излучает текст через код Java. Нет шаблонов, нет отражения, нет обработки тегов. У него три основные цели:

  • Сгенерируйте чистый отступ кода легко.
  • Поддержка внепоследовательного ввода строки.
  • Быть легко отлаживать.

Picocog на практике

Picocog можно рассматривать как альтернативу StringBuilder, ориентированную на генерацию кода. Picocog просто пишет строки — текущий уровень отступа запоминается.

Единственный необходимый класс — это класс PicoWriter .

Нет необходимости вручную помещать отступы в строковые литералы, но необходимо пометить отступ слева и записать строки кода с помощью методов writeln_r () , writeln_l () и writeln_lr () .

Иногда бывает удобно захотеть записывать в два или более мест в документе одновременно — и эти места имеют свой собственный стек отступов. Для этого вы добавляете заполнитель с помощью метода createDeferredWriter () . Возвращенный писатель может рассматриваться как указатель на строку, в которой он был создан.

Пример использования Picocog

Исходный код генерации кода:


Сгенерированные классы

Customer.java (генерируется Picocog):


Order.java (генерируется Picocog):


Спасаясь

Первоначальный выпуск Picocog не поддерживает текстовое экранирование. Либо напишите свой собственный экранирующий код (довольно просто), либо используйте библиотеку, такую ​​как Commons Lang, для своих экранирующих потребностей .

Языковая  поддержка

Picocog написан на Java, но может генерировать код на любом языке. Генератор кода может быть создан таким образом, что C #, Java, JavaScript и другие могут генерироваться из одной модели, включая аннотации, присоединенные к коду Java (через JSR 269).

Иногда небольшая реализация — это все, что вам нужно.

Другой не основанный на шаблонах подход к генерации кода — отличный язык xtend .

Для более глубокого обсуждения генерации кода см. Прекрасную статью Мэтью Фаулера « Генерация кода для чайников ».

Доступность

Picocog доступен сегодня на GitHub .

Picocog доступен в Maven Central по следующим координатам (jarfile также можно скачать здесь):


XML