Pregunta

Quiero una regla que comprueba que los campos y las clases estén correctamente anotados con la concurrencia de Java en las anotaciones de práctica proporcionada por: http://mvnrepository.com/artifact/net.jcip/jcip-annotations

Los campos que han de ser anotado con @GuardedBy y las clases tienen que ser anotado con uno de @Immutable, @ThreadSafe o @NotThreadSafe.

Tengo una regla aplica en la actualidad, lo que garantiza que las clases de primavera Dao están anotados con @Repository en lugar de @Service o @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>

El problema con este enfoque es que sólo puedo comprobar si hay alguna anotación y decirle, que la otra anotación mejor se debe utilizar en su lugar. Esto no me ayuda con el cheque JCIP anotación, porque no puedo comprobar si hay "ninguna anotación específica presente".

Para empezar, sería bueno si alguien sabía cómo transformar el cheque Dao anterior en un cheque que sólo asegura, que @Repository está presente en clases cuyos nombres terminan con Dao. Ese patrón se podría utilizar para desarrollar los controles JCIP de anotación.

O tal vez de tratar de transformar el cheque expresión regular, tal vez hay alguna manera de poner en práctica las normas JCIP con el apoyo simbólico de Checkstyle? Esto tal vez hacer la regla robusto.

De todos modos, me gustaría saber cómo asegurar que una anotación específica tiene que estar presente en un elemento específico a través de Checkstyle. Esperemos que alguien lo sabe. :)

¿Fue útil?

Solución

encontrado la solución:

<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>

Además, la comprobación de @GuardedBy no tiene ningún sentido, ya que depende de la estrategia de la sincronización de los usos de clase. Por lo tanto, no siempre es necesario añadir @GuardedBy a la declaración del campo. Y la comprobación de los casos en los que se necesita es totalmente demasiado compleja para una regla sencilla Checkstyle. :)

EDIT:. Sólo por coherencia, he actualizado la regla a una versión más robusta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top