对于FindBugs,是不是应该优先使用jar305.jar中的注释而不是annotation.jar中类似的注释?

13
FindBugs 分发中,annotations.jar 不是 jsr305.jar 的子集。然而,有几个注释似乎被复制了(要么完全相同,要么非常接近)。如果我有选择,我应该偏爱jsr305.jar中的注释吗?
请注意,我不仅仅想知道使用 jsr305.jar 中的注释会更好,因为它们代表一种标准。相反,我想知道如果我更喜欢特定注释的 jsr305.jar 版本,FindBugs 工具是否会执行相同(或更好)的分析。可能情况是,应该优先选择一些 jsr305.jar 注释,但其他注释则不应该。
我正在使用此写作时 最新版本 的 FindBugs 1.3.9。使用此版本,我看到以下选择(如果有其他选择,请更新此 table):
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(注意大写)
edu.umd.cs.findbugs.annotations.Nullable → javax.annotation.Nullable
edu.umd.cs.findbugs.annotations.When → javax.annotation.meta.When
此外,所有的JCIP 注解都有重复的部分:
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
抱歉,我没有意识到你问题的范围。然而,我将所有使用findbugs自有注释的项目转换为标准化注释,并没有注意到任何变化。这只是我的个人观察。如果我没记错,findbugs使用相同的代码进行验证。我稍后会查看代码。同时,我投票删除了我的答案,因为它并没有真正回答你的问题 :) - Steffen
是的,但是您的评论已经很好地回答了问题!请考虑将其作为答案发布。再次感谢。 - Greg Mattes
我修改了我的回答。仍在寻找一些自说明的代码部分和几个好的链接。我认为指向许多类文件来理解我的观点并没有多大意义。 - Steffen
1个回答

10

如果可能的话,你应该优先选择JSR305注释。为什么呢?因为JSR305是一种标准,尽可能地遵循标准是非常有意义的。在移植我的应用程序时,我没有注意到任何问题或行为上的变化。此外,你甚至可以定义自己的@NotNull注释,并且findbugs将会检查它(只要你命名为NotNull),参见这篇博客文章了解更多细节

就我所看到的源代码,从内部分析方法来看,findbugs正在使用相同的分析方法。根据注释名称进行调度。如上面链接的博客文章中提到的那样,查看edu.umd.cs.findbugs.ba.NullnessAnnotation和NullnessAnnotationDatabase类,以获取初始视图。查看此包,你将找到其他注释的类,例如jcip注释的类。

因此,从实现的角度来看,真的没有关系。对于所有还不确定使用哪些注释的人,我建议使用标准注释或自定义的注释,以避免他们的代码依赖于findbugs库。


感谢您的回复,但请完整地重新阅读我的问题。我对偏爱jsr305的东西并不是因为它是一个标准而感兴趣。我同意您的观点,在其他条件相同的情况下,应该优先选择标准,但我想知道FindBugs是否具有类似/相同注释的相同分析支持。 - Greg Mattes
我完全不知道它只是按名称匹配(显然我没有研究过源代码)。感谢您的见解!现在我想知道...它是否区分大小写匹配?(对于Nonnull :)) - Greg Mattes
此外,edu.umd.cs.findbugs.annotations 中的注释被标记为 @Deprecated - Dan R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接