- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

Поиск показал [1], что изменить 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 расширение к студии.
Вот [2]примерно к тем же выводам пришел человек, на несколько лет раньше меня.

Итог

  • У нас есть t4 шаблоны для кодогенерации

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

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

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

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

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

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

Автор: SychevIgor

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/54988

Ссылки в тексте:

[1] показал: http://msdn.microsoft.com/en-us/library/ff657795(v=vs.110).aspx

[2] Вот : http://visualstudiomagazine.com/Articles/2009/05/01/Visual-Studios-T4-Code-Generation.aspx?Page=1

[3] Источник: http://habrahabr.ru/post/212547/