2010-05-11 60 views
2

我希望我FindBugs的报告中未显示以下错误<静态初始化>:添加独家过滤器在FindBugs的

DM_NUMBER_CTOR:方法调用低效Number构造;使用静态valueOf而不是

问题是,这发生在groovy生成的代码文件,所以我无法控制源代码 - 这就是为什么我想排除它并将其添加到我的排除过滤器。我不想显式地添加类(因为我制作了许多工具将使用的API,我希望我的过滤器是通用的)。我不想完全从报告中删除此类错误,我真的希望仅在排除“静态初始化器”方法时才会排除此错误。任何想法?我尝试了下面的过滤器,但没有运气,也许有人有更好的主意?

<Match> 
    <Method name="~.*static initializer.*" /> 
    <Bug pattern="DM_NUMBER_CTOR" /> 
</Match> 

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

在类net.milanaleksic.cuc.tools.sound.SoundPlayerTool 在方法net.milanaleksic.cuc.tools.sound。 SoundPlayerTool。() 调用方法新龙(长) 应该调用Long.valueOf(长),而不是 在SoundPlayerTool.groovy

+0

为什么你对标记Groovy代码这个“时髦”,不FindBugs的工作?我知道你大概可以运行它在常规课上,但结果实际上有用吗? – 2010-05-11 17:24:38

+0

它仍然是尽早说,但我认为,在一段时间内,你可以做好事找到findbugs。我将目标文件夹与编译的Java和Groovy文件(我使用groovyc任务),所以基本上我会发现处理Java和Groovy生成的字节码。 你可以在下一页看到过滤AspectJ编译的字节码的例子:http://findbugs.sourceforge.net/manual/filter.html#d0e2050 – 2010-05-11 20:21:58

回答

4

静态初始化代码将被报告为发生在名为<clinit>的方法中。你可以尝试设置一个<Method name='&lt;clinit&gt;'/>过滤器吗? (这几乎是<clinit>但XML转义)。完全没有经过测试,只是一些随机的想法。

我的线索是HTTP的这一部分:// FindBugs的\ .googlecode \ .COM & SA = N & CD = 2 & CT = RC &升= 125" >一些FindBugs的内部测试:

String methodName = m.getMethodName(); 
... 
if (... methodName.equals("<clinit>"))) ... 

我不知道,但我认为同样的方法名(<clinit>)是,如果错误实际发生提到...

+1

谢谢!我确认以下过滤器确实是我想要的: <方法名称= “<clinit> ”/> <错误模式=“ DM_NUMBER_CTOR”/> 2010-05-11 22:20:26

+0

我在FindBugs的bug跟踪系统提交问题报告:HTTP ://sourceforge.net/tracker/?func = detail&aid = 3000303&group_id = 96405&atid = 614693所以我们希望他们能在他们的文档中解释这个隐藏的功能。 – 2010-05-12 18:11:40

+1

是静态块的内部类文件格式名称,因为是构造函数的内部名称。 – MeBigFatGuy 2010-05-18 03:08:28