在代码生成模板的Enterprise Architect 7.1.834中,可以在文件模板的范围内打印类所属的所有父包吗?
需要的原因是生成符合我公司编码标准的多包含警卫
我试过了两个:
%list="Namespace__Notes" @separator="-"%
和
%packageName%
两者的输出只打印顶级父包(Package1),但我希望看到:
Package1-Package2-Package3
有没有人找到办法做到这一点?
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"
答案 0 :(得分:0)
%packagePath%为您提供以点分隔的包层次结构,而%classQualName%为您生成:: - 分隔的类层次结构(对于内部类)。
这是针对当前版本的,我不知道这些宏是否存在于7.1之前。您应该认真考虑升级,因为当前版本是9.3,EA与项目内容是向后兼容的。
答案 1 :(得分:-1)
在EA 10%中,packagePath%也只提供文件模板中的顶级包
[编辑]另一个肮脏和局部解决方案。
我制作了一个新的自定义模板,Namespace__fullName:
$prevName = %list="Namespace__fullName"%
%if $prevName != ""%
%packageName%::$prevName
%else%
%packageName%
%endIf%
和Class__fullQualName:
%list="Namespace__fullName"%::%classQualName%
当源文件只包含1个类(可能包含嵌套项)时,这将在简单的情况下工作,因此只有1个名称空间层次结构。