...

пятница, 14 февраля 2014 г.

Генерация 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.




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

Поиск показал, что изменить 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 расширение к студии.

Вот примерно к тем же выводам пришел человек, на несколько лет раньше меня.

Итог


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий