source sonar online linter español descargar code bugs java annotations static-analysis findbugs

java - online - sonar code analyzer



¿Deben preferirse las anotaciones en jar305.jar sobre las anotaciones similares en anotación.jar para FindBugs? (1)

En la distribución FindBugs , annotations.jar no es un subconjunto de jsr305.jar . Sin embargo, varias anotaciones parecen estar duplicadas (ya sea exactamente o muy de cerca). ¿Debo preferir una anotación en jsr305.jar si puedo elegir?

Tenga en cuenta que no solo me interesa saber que sería "mejor" utilizar anotaciones de jsr305.jar simplemente porque representan un estándar. Más bien, quiero saber si la herramienta FindBugs realizará el mismo (o mejor) análisis si prefiero la versión jsr305.jar de una anotación particular. Podría ser el caso que algunas anotaciones jsr305.jar deberían ser preferidas, pero otras no deberían.

Estoy usando FindBugs 1.3.9, que es la versión más reciente a partir de este escrito. Con esta versión, veo las siguientes opciones (actualice esta tabla si hay otras):

edu.umd.cs.findbugs.annotations.CheckForNull → javax.annotation.CheckForNull
edu.umd.cs.findbugs.annotations.CheckReturnValue → javax.annotation.CheckReturnValue
edu.umd.cs.findbugs.annotations.NonNull → javax.annotation.Nonnull (capitalización NB)
edu.umd.cs.findbugs.annotations.Nullable → javax.annotation.Nullable
edu.umd.cs.findbugs.annotations.When → javax.annotation.meta.When

Además, todas las anotaciones de JCIP están duplicadas:

net.jcip.annotations.GuardedBy → javax.annotation.concurrent.GuardedBy
net.jcip.annotations.Immutable → javax.annotation.concurrent.Immutable
net.jcip.annotations.NotThreadSafe → javax.annotation.concurrent.NotThreadSafe
net.jcip.annotations.ThreadSafe → javax.annotation.concurrent.ThreadSafe


Sí, debería preferir la anotación JSR305 si es posible. ¿Por qué? Porque el JSR305 es un estándar y tiene mucho sentido apegarse a los estándares siempre que sea posible. Mientras porté mis propias aplicaciones, no noté ningún problema o cambio en el comportamiento. Además, incluso puede definir su propia anotación @NotNull y findbugs la recogerá (siempre que la nombre NotNull) consulte esta entrada en el blog para obtener más detalles .

Hasta donde puedo ver mirando las fuentes, findbugs está usando los mismos métodos de análisis internamente. El envío se realiza solo en función del nombre de las anotaciones. Como se menciona en la publicación de blog vinculada anteriormente, eche un vistazo a las clases edu.umd.cs.findbugs.ba.NullnessAnnotation y NullnessAnnotationDatabase para obtener una vista inicial de cómo se hace internamente. Eche un vistazo a este paquete y encontrará clases similares para las otras anotaciones, como las jcip.

Entonces, desde el punto de vista de implementaciones, realmente no importa. Para todo el mundo que todavía no esté seguro de qué anotaciones usar, consideraría utilizar las anotaciones estándar o las autodefinidas para evitar que su código dependa de la biblioteca de findbugs.