2

フィールドとクラスが Java 並行性で適切に注釈付けされていることを確認するルールが必要です: http://mvnrepository.com/artifact/net.jcip/jcip-annotationsによって提供される実際の注釈

フィールドには @GuardedBy で注釈を付ける必要があり、クラスには @Immutable、@ThreadSafe、または @NotThreadSafe のいずれかで注釈を付ける必要があります。

現在、Spring Dao クラスに @Service または @Component の代わりに @Repository でアノテーションを付けるルールが適用されています。

<module name="Regexp">
    <property name="format" 
        value="(@Component|@Service)(.*[\n])*.*class.*Dao.*\{" />
    <property name="message" 
        value="Daos sollten lieber mit @Repository annotiert werden." />
    <property name="illegalPattern" value="true" />
</module>

このアプローチの問題は、いくつかの注釈をチェックして、代わりに他の注釈を使用する方がよいことを伝えることしかできないことです。「特定の注釈が存在しない」ことを確認できないため、これは jcip 注釈チェックには役立ちません。

手始めに、上記の Dao チェックを、名前が Dao で終わるクラスに @Repository が存在することを保証するチェックに変換する方法を誰かが知っていれば素晴らしいでしょう。そのパターンを使用して、jcip 注釈チェックを開発できます。

あるいは、正規表現チェックを変換しようとする代わりに、checkstyle のトークン サポートを使用して jcip ルールを実装する方法があるのではないでしょうか? これにより、ルールが堅牢になる可能性があります。

とにかく、checkstyle を介して特定の要素に特定の注釈が存在する必要があることを確認する方法を知りたいです。うまくいけば、誰かがこれを知っています。:)

4

1 に答える 1

2

解決策を見つけました:

<module name="Regexp">
    <property name="format" value="(interface [a-zA-Z0-9 &lt;&gt;,\.]* \{|(@Immutable|@ThreadSafe|@NotThreadSafe)(.*[\n])*.*(class|enum) [a-zA-Z0-9\s&lt;&gt;,\.]* \{)" />
    <property name="message" value="Types must be annotated with @Immutable, @ThreadSafe, or @NotThreadSafe." />
    <property name="illegalPattern" value="false" />
</module>

また、クラスが使用する同期戦略に依存するため、チェックし@GuardedByても意味がありません。@GuardedByしたがって、常にフィールド宣言に追加する必要はありません。そして、それが必要なケースをチェックすることは、単純な checkstyle ルールには完全に複雑すぎます。:)

編集:一貫性を保つために、ルールをより堅牢なバージョンに更新しました。

于 2010-07-01T15:34:50.310 に答える