2010-06-25 2 views
2

Я хочу правило, которое проверяет, что поля и классы правильно аннотации с Java параллелизмом на практике аннотации, представленный: http://mvnrepository.com/artifact/net.jcip/jcip-annotationsCheckstyle правила jcip аннотаций

Поле должно быть аннотированным с @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, потому что я не могу проверить «отсутствие конкретной аннотации».

Для начала было бы здорово, если бы кто-то знал, как преобразовать Дао-чек выше в чек, который просто гарантирует, что @Repository присутствует в классах, имена которых заканчиваются Дао. Этот шаблон можно затем использовать для разработки аннотаций jcip.

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

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

ответ

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

EDIT: Просто для согласованности, я обновил правило до более надежной версии.

Смежные вопросы