2011-06-12 6 views
12

En la distribución FindBugs, annotations.jar es no 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 tengo otra opción?¿Deberían preferirse las anotaciones en jar305.jar sobre las anotaciones similares en anotación.jar para FindBugs?

Tenga en cuenta que no estoy solo interesado en saber que sería "mejor" utilizar las 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. Puede ser que algunas anotaciones de jsr305.jar sean las preferidas, pero otras no.

Estoy usando FindBugs 1.3.9 que es the most recent version al momento de escribir esto. Con esta versión, veo las siguientes opciones (por favor, actualice esta table si hay otros):

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 (NB capitalización)
edu.umd.cs.findbugs.annotations.Nullable → javax.annotation .Nullable
edu.umd.cs.findbugs.annotations.Cuando → javax.annotation.meta.Cuando

Además, toda la JCIPannotations están duplicados:

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

+1

Disculpe, no me he dado cuenta del alcance de su pregunta.Sin embargo, convertí todos mis proyectos utilizando findbugs propias anotaciones a las estandarizadas y no noté ningún cambio. Solo mis observaciones personales. Si mal no recuerdo findbugs utiliza el mismo código para la verificación. Echaré un vistazo al código más tarde. Mientras tanto, he votado para eliminar mi respuesta, ya que realmente no está respondiendo tu pregunta :) – Steffen

+0

Sí, pero tu comentario es una muy buena respuesta. Considera hacer una respuesta por favor. Gracias de nuevo. –

+0

Modifiqué mi respuesta. Todavía estoy buscando partes del código autoexplicativas y un par de buenos enlaces. No creo que tenga mucho sentido señalar numerosos archivos de clase que uno debe seguir para entender mi punto. – Steffen

Respuesta

9

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 this blog entry for more details.

Por lo que puedo ver mirando las fuentes, findbugs está utilizando 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 el blog post vinculado 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.

Por lo tanto, desde el punto de vista de las 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.

+0

Gracias por su respuesta, pero vuelva a leer mi pregunta por completo. No estoy tan interesado en preferir jsr305 simplemente porque es un estándar. Estoy de acuerdo con usted en que, ceteris parabus, los estándares deben ser preferidos, pero quiero saber si FindBugs tiene soporte de análisis idéntico para anotaciones similares/idénticas. –

+0

No tenía idea de que solo coincidiera con el nombre (obviamente no he estudiado las fuentes). Gracias por la visión! Ahora me pregunto ... ¿coincide con las mayúsculas y minúsculas? (para Nonnull :) –

+0

Además, las anotaciones en 'edu.umd.cs.findbugs.annotations' están marcadas como' @ Deprecated'. –

Cuestiones relacionadas