我使用Acceleo以使用我制作的模型生成代码。我设法保护我的方法,以保护他们使用“@generated NOT”以防我需要使用Acceleo重新生成我的代码。问题是添加@generated NOT保护所有方法内容,即正文,签名和JavaDocs。
问题是我只需要保留方法体,或者至少保留方法体及其签名,但我需要更新文档。我怎么能这样做?
仅供参考,这里是潜在生成类的一个例子:
/*
* @generated
*/
public class ActeurRefEntrepriseServicesImpl implements ActeurRefEntrepriseServices {
@Autowired
HelloWorldService helloWorldService;
/**
* Service which say hello
*
* @param name
* user name
* @return print Hello username
*
* @generated NOT
*/
@Override
public void sayHello(final String name) {
helloWorldService.print(name);
}
}
答案 0 :(得分:1)
巴普蒂斯特,
@generated
标记使用标准的EMF保护规则:“@generated
”表示将生成设置它的块的正文,其他任何意思没有再生。如果您在任何元模型生成的代码中设置了“@generated
”,那么无论您进行哪些编辑,都会看到javadoc被保留。
简而言之,您无法告诉EMF重新生成除代码本身之外的任何内容。
如果你需要保护身体而不是javadoc,你必须从“@generated”保护转移到Acceleo的[protected]块。即,更改您的模板:
[template generatedMethod(methodName : String)]
/**
* Some doc.
* @param param1
* param documentation.
* @generated
*/
[generateSignature(methodName)/] {
[generateBody()/]
}
[/template]
使用受保护的块:
[template generatedMethod(methodName : String)]
/**
* Some doc.
* @param param1
* param documentation.
*/
[protected (methodName)]
[generateSignature(methodName)/] {
[generateBody()/]
}
[/protected]
[/template]
通过这种模式,保护区域外的任何内容都将被重新生成,其他所有内容将不会被重新生成。
另请参阅the Acceleo website提供的完整文档。
如果您绝对需要为模型使用“@generated
”保护方法,则需要篡改EMF中的JMerger API并更改为您生成的启动器Acceleo以便使用自己的合并策略(参见该启动器的getGenerationStrategy方法)。请注意,这绝非易事。