0

作成したモデルでコードを生成するためにAcceleoを使用しています。Acceleoでコードを再生成する必要がある場合に備えて、「@generatedNOT」を使用してメソッドを保護するためにメソッドを保護することができました。問題は、@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

バプティスト、

タグは標準の@generatedEMF保護ルールを使用します: " @generated"は、それが設定されているブロックの本体が生成されることを意味し、それ以外は再生成されないことを意味します。メタモデルで生成されたコードのいずれかで「」として何かを設定する@generatedと、そこでも、編集を行ってもjavadocが保持されることがわかります。

つまり、EMFにコード自体以外のものを再生成するように指示することはできません。

本体を保護する必要があるがjavadocを保護する必要がない場合は、「@generated」保護からAcceleoの[保護された]ブロックに移行する必要があります。つまり、テンプレートを次のように変更します。

[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のWebサイトから入手できる完全なドキュメントも参照してください。

@generatedモデルに""保護メソッドを使用する必要がある場合は、EMFのJMerger APIを改ざんし、独自のマージ戦略を使用するために生成されたランチャーAcceleoを変更する必要があります(そのランチャーのgetGenerationStrategyメソッドを参照してください)。 )。これは決して簡単な作業ではないことに注意してください。

于 2012-06-15T12:35:16.003 に答える