правило checkstyle для аннотаций jcip - PullRequest
2 голосов
/ 25 июня 2010

Мне нужно правило, которое проверяет, чтобы поля и классы были правильно аннотированы с помощью java-параллелизма, на практике аннотации, предоставляемые: http://mvnrepository.com/artifact/net.jcip/jcip-annotations

Поля должны быть аннотированы @GuardedBy, а классы должны быть аннотированы одним из @Immutable, @ThreadSafe или @ NotThreadSafe.

В настоящее время у меня есть правило, которое гарантирует, что классы Spring Dao аннотируются @Repository вместо @Service или @ Component.

<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 в проверку, которая просто гарантирует, что @Repository присутствует в классах, имена которых заканчиваются на Dao. Затем этот шаблон можно использовать для разработки проверок аннотаций jcip.

Или, может быть, вместо того, чтобы пытаться преобразовать проверку регулярного выражения, возможно, есть какой-то способ реализовать правила jcip с поддержкой токенов checkstyle? Это может сделать правило надежным.

В любом случае, я хотел бы знать, как обеспечить наличие конкретной аннотации для определенного элемента с помощью контрольного стиля. Надеюсь, кто-то знает это. :)

1 Ответ

2 голосов
/ 01 июля 2010

Нашел решение:

<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 к объявлению поля.А проверка на случаи, когда это необходимо, слишком сложна для простого правила проверки стиля.:)

РЕДАКТИРОВАТЬ: Просто для согласованности, я обновил правило до более надежной версии.

...