Генерация java кода из UML модели

в 4:45, , рубрики: .net, java, UML, Visual Studio, метки: , , ,

В Visual Studio UML Explorer реализована возможность запуска Generate Code, после этого будет сгенерирован C# код на основе UML описания. Нам захотелось сгенерировать java код, а не C#.
C# и java достаточно близкие языки, чтобы не писать трансформацию uml-> java самому. (Среди того, что может быть сгенерировано из UML этих различий и того меньше.) Мы взяли готовые C# шаблоны и модифицировали их.

Способы генерации

Было в принципе 3 способа генерации:

  • Сгенерировать код через WriteLine чисто в C#, но это как-то некрасиво, ибо конкатенация.
  • Второй вариант — это написать на t4, и написать свою кнопку, по которой произойдет генерация. Проблема в том, что t4 пришлось бы писать самим полностью, т.к. код готового шаблона завязан на определенные библиотеки, и как это правильно вызвать, чтобы не вылетало ошибок — я так и не понял.
  • Изменить t4 шаблон для кодогенерации уже существующей кнопкой в visual studio.

В итоге мы остановились на последнем варианте, т.к. это наименее ресурсно затратный способ.

Поиск показал, что изменить t4 шаблон при геренации не сложно. Нужно при первом нажатии generate code выставить пути к шаблонам.

Cписок модификаций template

  • Переименовали файла с CSharp* на Java, чтобы было очевидно.
  • Убрали unsafe, partial, internal, protected-internal ключевые слова. Для этого аккуратно удалили все методы, которые содержат эти слова.
  • Затем убрали подключаемые по умолчанию namespace типа system.linq — это бесполезно.
  • Заменили sealed на final.
  • Поправили расстановку границы namespace. Т.к. в C# — namespace {}, а в java — package.
  • Изменили шаблон наследования с двоеточия на extends
  • Убрали модификатор override и заменили атрибутами.
  • Заменили auto properties на тройку get_x,set_x,_x.

Для базовых вещей — этого должно хватить.

Распространение t4 шаблона

Теперь вопрос — как распространять наши t4 шаблоны, чтобы их можно было не только локально запускать, но и на любой другой машине не занимаясь копированием файлов руками.
Решение одно — создать расширение visual studio и вместе с ним ставить эти шаблоны.
Я долго искал информацию по теме «как правильно установить t4 шаблоны», но ничего лучшего не нашел, как просто скопировать эти шаблоны в assembly, а саму сборку использовать как MEF расширение к студии.
Вот примерно к тем же выводам пришел человек, на несколько лет раньше меня.

Итог

  • У нас есть t4 шаблоны для кодогенерации
    Генерация java кода из UML модели
  • Есть расширение Visual Studio для дистрибуции шаблонов.

    Генерация java кода из UML модели
  • Нажимаем на кнопку generate code

    Генерация java кода из UML модели
  • Подставляем шаблоны по которым генерировать код

    Генерация java кода из UML модели
  • и получаем из UML модели java интерфейсы.

    Генерация java кода из UML модели

Приятного прочтения.

Автор: SychevIgor

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js