[英]Findbugs and comparing
我最近開始在我正在做的java構建中使用findbugs靜態分析工具。 第一份報告帶來了大量高優先級警告。 作為一個迷戀型人,我已經准備好全力以赴。 但是,我必須遺漏一些東西。 在比較事情時,我得到了大部分警告。 如下面的代碼:
public void setSpacesPerLevel(int value)
{
if( value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
在讀取的if語句中生成高優先級警告。
File:Indenter.java,Line:60,Type:BIT_AND_ZZ,Priority:High,Category:CORRECTNESS檢查sample.Indenter.setSpacesPerLevel(int)中的((...)&0)== 0
我將int與int進行比較,看起來很常見。 我通過類似的簡單比較得到了相當多的錯誤。
對於看似簡單的代碼塊,我有很多其他高優先級警告。 我在這里錯過了什么嗎? 我意識到靜態分析會產生誤報,但我所看到的錯誤似乎過於微不足道。
這個讓我也摸不着頭腦。
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
這給出了以下findbugs警告:
File: Indenter.java, Line: 160, Type: IL_INFINITE_LOOP, Priority: High, Category: CORRECTNESS
There is an apparent infinite loop in sample.Indenter.indent()
This loop doesn't seem to have a way to terminate (other than by perhaps throwing an exception).
有任何想法嗎?
所以基本上我有一些文件和50-60個高優先級警告類似於上面的那些。 我正在使用findbugs 1.3.9並從findbugs ant任務中調用它
更新:我有一個由hudson服務器執行的構建,並且代碼覆蓋了Clover的代碼。 當我關閉它時,我的所有高優先級警告都消失了。 這是有道理的。 感謝您的反饋。
更新:我有一個由hudson服務器執行的構建,並且代碼覆蓋了Clover的代碼。 當我關閉它時,我的所有高優先級警告都消失了。 這是有道理的。 感謝您的反饋。
附注:
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
如果result
是java.lang.String
,則這可能效率低下,因為您對每個空格字符執行以下步驟:
char[]
來保存連接的結果 java.lang.String
實例 如果你反復這樣做,特別是當result
已經很長時,這需要花費很多時間。
如果性能(時間和內存)對於該方法很重要,則應考慮使用StringBuilder
(非線程安全)或StringBuffer
(線程安全)。
你是通過Eclipse插件,螞蟻還是gui運行Findbugs? 是否有可能代碼在運行之后沒有重新編譯(在進行更改之前)?
如果setSpacesPerLevel不太長,請輸出
javap -v TheClassThatContainssetSpacerPerLevel
至於第二個錯誤,你必須先顯示整個循環,然后再說出它是否有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.