2013-08-19 87 views
1

In checkstyle我啓用了對縮進的檢查。我遇到了一個奇怪的問題。縮進檢查對於語句標籤無法正常工作

支票對於除statement label以外的所有物品都正常工作。

我有一段代碼如下所示:

public void doIt(int k) { 
     for (int i = 0; i < k; i++){ 
      search:{ 
        for (int j = 0; j < i; j++){ 
        if (j == i){ 
         break search; 
        } 
       } 
      } 
     } 
    } 

縮進級別設置爲4

現在,如果我把statement label (search)在11級,它應該給一個警告,因爲

- label child at indentation level 11 not at correct indentation, 12 

但問題是,其在該行給予Multiple markers

- label child at indentation level 11 not at correct indentation, 12 
- label child at indentation level 11 not at correct indentation, 8 

所以,無論我在哪個級別縮進label,總會有一個/兩個警告。

沒有啓用重複檢查與兩個不同的Indent Level縮進。

我如何得到兩個單一支票的警告?如何解決這個問題?

回答

1

這是IndentationCheck的侷限性。標籤縮進被硬編碼爲比樹中此時的正常縮進小一級(通過查看Checkstyle 5.6 sources來驗證)。下一個標記,即左花括號,或者,如果省略大括號,則for語句必須處於預期水平。所以,你可以沒有任何錯誤格式化這樣的代碼:

public void doIt(int k) { 
    for (int i = 0; i < k; i++){ 
    search: 
     for (int j = 0; j < i; j++){ 
      if (j == i){ 
       break search; 
      } 
     } 
    } 
} 

這當然是個人喜好的問題,但我不喜歡它。我建議不要使用Checkstyle來檢查格式,而是使用自動代碼格式化程序。例如,Eclipse內置了一個很好的格式化器。