0

我使用 Acceleo 来使用我制作的模型生成代码。我设法保护我的方法,以便使用“@generated NOT”保护它们,以防我需要使用 Acceleo 重新生成我的代码。问题是添加@generated 并不能保护所有方法内容,即正文、签名和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);
    }
}
4

1 回答 1

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]

使用这种范式,保护区之外的任何东西都将被再生,其他一切都将保持不变。

另请参阅Acceleo 网站提供的完整文档。

如果您绝对需要@generated为您的模型使用 " " 保护方法,则需要篡改 EMF 中的JMerger API并更改为您生成的启动器 Acceleo 以使用您自己的合并策略(请参阅该启动器中的 getGenerationStrategy 方法)。请注意,这绝不是一件容易的事。

于 2012-06-15T12:35:16.003 回答