【问题标题】:checkstyle rule for jcip annotationsjcip 注释的 checkstyle 规则
【发布时间】:2011-03-08 06:25:09
【问题描述】:

我想要一个规则来检查字段和类是否使用 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 注释检查。

或者也许不是尝试转换正则表达式检查,也许有一些方法可以通过 checkstyle 的令牌支持来实现 jcip 规则?这可能会使规则变得健壮。

无论如何,我想知道如何通过 checkstyle 确保特定注释必须出现在特定元素上。希望有人知道这一点。 :)

【问题讨论】:

    标签: regex annotations checkstyle rule


    【解决方案1】:

    找到解决方案:

    <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 规则来说,检查需要它的情况完全太复杂了。 :)

    编辑:为了保持一致性,我已将规则更新为更强大的版本。

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 2010-09-15
      • 2023-04-09
      相关资源
      最近更新 更多