在 findbugs 中为 <static initializer> 添加专属过滤器

Mil*_*sić 3 java groovy findbugs

我希望我的 findbugs 报告不显示以下错误:

DM_NUMBER_CTOR:方法调用低效的 Number 构造函数;使用静态 valueOf 代替

问题是这发生在 groovy 生成的代码文件中,所以我无法控制源代码 - 这就是为什么我想排除它并将其添加到我的排除过滤器中。

我不想显式添加类(因为我制作了许多工具都会使用的 API,所以我希望我的过滤器是通用的)。我不想按类型从报告中完全删除这个错误,我真的只想排除这个错误,如果它发生在“静态初始化程序”方法中。任何的想法?我尝试了下面的过滤器,但没有运气,也许有人有更好的主意?

<Match>
    <Method name="~.*static initializer.*" />
    <Bug pattern="DM_NUMBER_CTOR" />
</Match>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这是 FindBugs 的“堆栈跟踪”:

在类 net.milanaleksic.cuc.tools.sound.SoundPlayerTool 在方法 net.milanaleksic.cuc.tools.sound.SoundPlayerTool.() 中调用方法 new Long(long) 应该调用 Long.valueOf(long) 而不是在 SoundPlayerTool.groovy

Grz*_*zki 5

猜想静态初始化程序代码会被报告为发生在名为<clinit>. 您可以尝试设置<Method name='&lt;clinit&gt;'/>过滤器吗?(这几乎是<clinit>XML 转义的)。完全未经测试,只是一些随意的想法。

我的线索是 http://findbugs\.googlecode\.com&sa=N&cd=2&ct=rc&l=125">一些 FindBugs 内部测试的这一部分:

 String methodName = m.getMethodName();
 ...
 if (...  methodName.equals("<clinit>")) ) ...
Run Code Online (Sandbox Code Playgroud)

我不确定,但我认为<clinit>如果错误确实发生了,就会提到相同的方法名称 ( )...

  • 谢谢!我确认以下过滤器确实符合我的要求: &lt;Match&gt; &lt;Method name="&lt;clinit&gt;" /&gt; &lt;错误模式="DM_NUMBER_CTOR" /&gt; &lt;/Match&gt; (2认同)