2010-05-11 59 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