Шаблоны генерации кода Enterprise Architect: импорт иерархической структуры пакета в виде строки

Проблема

В Enterprise Architect 7.1.834 в шаблонах генерации кода можно распечатать все родительские пакеты, к которым принадлежит класс в рамках шаблона файла?

Причина, по которой это необходимо, заключается в создании защиты с несколькими включениями, совместимой со стандартом кодирования моей компании.


Что не работает

Я пробовал оба:

  %list="Namespace__Notes" @separator="-"% 

а также

  %packageName% 

Вывод обоих печатает только родительский пакет верхнего уровня (Package1), но я хотел бы видеть:

  Package1-Package2-Package3

Кто-нибудь нашел способ сделать это?

Namepace__Notes

Namepace__Notes — это настраиваемый шаблон с типом Namepace, содержание которого следующее:

  %PI=""%
  %packageName%

[править] Грязный раствор

Мое текущее (грязное) решение - изменить путь к файлу. Я что-то упустил?

Код:

$l_backslash = %REPLACE("\z","z","")%
$filepath = %filePath%
$upper_filepath = %TO_UPPER($filepath)%
$upper_package_as_path = $l_backslash + %TO_UPPER(packageName)% + $l_backslash
$upper_package_base_len = %LENGTH(packageName)%

$package_path_pos = %FIND($upper_filepath,$upper_package_as_path)%
%if $package_path_pos != "-1" and $package_path_pos != "0"%
$upper_filepath = %MID($upper_filepath,$package_path_pos)%
%endIf%

$file_define =  "_" + $upper_filepath + "__"
$file_define = %REPLACE($file_define,".","_")%
$file_define = %REPLACE($file_define,$l_backslash,"_")%
$file_define = %REPLACE($file_define,"/","_")% 

$body += "/**************************************************************************//**"
$body += "\n * \file         " + %fileName%
$body += "\n *"
$body += "\n * \brief        " + %elemType% + " " + %className% + " header file"
$body += "\n *"
$body += "\n * \author       " + %classAuthor ? value : "<unknown>"%
$body += "\n *"
$body += "\n *****************************************************************************/"
$body += "\n"
$body += "\n#ifndef " + $file_define
$body += "\n#define " + $file_define
$body += "\n"

person 5tephenBennett    schedule 24.04.2012    source источник


Ответы (2)


%packagePath% дает вам иерархию пакетов, разделенных точками, а %classQualName% дает иерархию классов, разделенных :: (для внутренних классов).

Это для текущей версии, не знаю были ли эти макросы еще в 7.1. Вам следует серьезно подумать об обновлении, поскольку текущая версия — 9.3, а EA обратно совместима с содержимым проекта.

person Uffe    schedule 25.04.2012
comment
Я попробовал %packagePath%, и в моей версии он работает только в рамках пространства имен, но область действия файла, на которую я ссылался, находится перед пространствами имен. В этой области он печатает только ‹Package1› независимо от глубины пакета. Кроме того, он никогда не разделяется точками (вопреки документации), а разделяется ::, так что, возможно, это ошибка. - person 5tephenBennett; 25.04.2012

В EA 10 %packagePath% также дает только пакет верхнего уровня в шаблоне файла.

[Изменить] Еще одно грязное и частичное решение.

Я создал новые пользовательские шаблоны Namespace__fullName:

$prevName = %list="Namespace__fullName"%
%if $prevName != ""%
%packageName%::$prevName
%else%
%packageName%
%endIf%

; и Class__fullQualName:

%list="Namespace__fullName"%::%classQualName%

Это будет работать в простых случаях, когда исходный файл содержит только 1 класс (возможно, с вложенными элементами) и, следовательно, только 1 иерархию пространств имен.

person Andrey    schedule 11.04.2014