簡體   English   中英

Findbugs和比較

[英]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(" ");
}

如果resultjava.lang.String ,則這可能效率低下,因為您對每個空格字符執行以下步驟:

  1. 創建一個新的char[]來保存連接的結果
  2. 創建一個包裹在字符數組周圍的新java.lang.String實例

如果你反復這樣做,特別是當result已經很長時,這需要花費很多時間。

如果性能(時間和內存)對於該方法很重要,則應考慮使用StringBuilder (非線程安全)或StringBuffer (線程安全)。

你是通過Eclipse插件,螞蟻還是gui運行Findbugs? 是否有可能代碼在運行之后沒有重新編譯(在進行更改之前)?

如果setSpacesPerLevel不太長,請輸出

javap -v TheClassThatContainssetSpacerPerLevel

至於第二個錯誤,你必須先顯示整個循環,然后再說出它是否有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM