企业架构师代码生成模板:将分层包结构导入为字符串



>问题

在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"

%packagePath% 为您提供点分隔的包层次结构,而 %classQualName% 生成 ::-分隔的类层次结构(对于内部类)。

这是针对当前版本的,我不知道这些宏是否早在 7.1 中就存在。您应该认真考虑升级,因为当前版本是 9.3,EA 是向后兼容的 wrt 项目内容。

在 EA 10 中,%packagePath% 也只在文件模板中给出顶级包

[编辑] 另一个肮脏和部分的解决方案。

我制作了一个新的自定义模板,Namespace__fullName:

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

;并Class__fullQualName:

%list="Namespace__fullName"%::%classQualName%
当源文件仅包含 1 个

类(可能具有嵌套项)并因此仅包含 1 个命名空间层次结构时,这将在简单情况下起作用。

最新更新