我想要一个规则来检查字段和类是否通过实践注释中的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检查转换为一个检查,确保在名称以Dao结尾的类上存在@Repository,那将会很酷。 然后可以使用该模式来开发jcip注释检查。
或者也许不是尝试转换正则表达式检查,也许有一些方法可以使用checkstyle的令牌支持来实现jcip规则?这可能会使规则变得健壮。
无论如何,我想知道如何通过checkstyle确保特定元素必须存在于特定元素上。希望有人知道这一点。 :)
答案 0 :(得分:2)
找到解决方案:
<module name="Regexp">
<property name="format" value="(interface [a-zA-Z0-9 <>,\.]* \{|(@Immutable|@ThreadSafe|@NotThreadSafe)(.*[\n])*.*(class|enum) [a-zA-Z0-9\s<>,\.]* \{)" />
<property name="message" value="Types must be annotated with @Immutable, @ThreadSafe, or @NotThreadSafe." />
<property name="illegalPattern" value="false" />
</module>
此外,检查@GuardedBy
没有任何意义,因为它取决于类使用的同步策略。因此,并不总是需要将@GuardedBy
添加到字段声明中。检查需要它的情况对于简单的checkstyle规则来说完全过于复杂。 :)
编辑:为了保持一致性,我已将规则更新为更强大的版本。