1

问题

在 Enterprise Architect 7.1.834 中的代码生成模板中,是否可以在文件模板的范围内打印一个类所属的所有父包?

需要这样做的原因是生成符合我公司编码标准的多包含警卫


什么不起作用

我都试过了:

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

  %packageName% 

两者的输出都只打印顶级父包(Package1),但我想看看:

  Package1-Package2-Package3

有没有人找到办法做到这一点?

命名空间__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"
4

2 回答 2

0

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

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

于 2012-04-25T05:49:42.260 回答
-1

在 EA 10 %packagePath% 中也只提供文件模板中的顶级包

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

我制作了一个新的自定义模板,命名空间__fullName:

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

; 和类__fullQualName:

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

当源文件仅包含 1 个类(可能带有嵌套项)并因此仅包含 1 个命名空间层次结构时,这将适用于简单的情况。

于 2014-04-11T08:17:39.437 回答