2009-10-10 66 views
5

我在維護一個不贊成使用某些公共靜態字段的API。我可以針對棄用的方法和類禁用CheckStyle投訴嗎?

CheckStyle大聲抱怨這些,但我寧願讓它完全忽略它們,因爲我已經通過將字段標記爲已棄用來處理該問題。

具體而言,該庫具有枚舉常量(public static final),但它們未標記爲final。 CheckStyle會抱怨他們,但我不能在沒有違約的情況下將他們改爲final。

我的計劃是將它們標記爲不推薦使用,然後再刪除它們。但將它們標記爲已棄用不會將其從CheckStyle報告中刪除。

+0

你能提供確切的輸出嗎? – 2009-10-10 12:42:08

回答

8

我有兩個選項供您:

  1. 抑制警告爲每個行手動

    這種方法是不靈活的,你必須每次都變速線時保持抑制的配置。但是你可以單獨處理每個事件。

    <suppress checks="YOURCHECK" files=".*YOURCLASS\.java" lines="YOURLINES"/> 
    

    我不知道哪個檢查導致您的問題,因此您必須用正確的名稱替換YOURCHECK。 YOURCLASS命名包含已棄用代碼的java文件,但您可以插入.*以將其應用於每個文件。 YOURLINES是一個以逗號分隔的值列表,其中每個值是一個整數或整數範圍,用integer-integer表示。

  2. 使用註釋,以提醒CheckStyle的忽略警告

    該解決方案可以讓你一次停用所有過時的成員檢查。但是你必須遵循嚴格的約定。您必須在最後一位添加@deprecated評論給那些成員(您可能已經做了什麼),因爲此過濾器的行數範圍很大。

    /** 
    * @deprecated I don't like this anymore. 
    */ 
    public static String EXAMPLE = "example"; 
    

    此解決方案需要在配置文件中進行更改。首先,您必須將FileContentsHolder作爲子女添加到TreeWalker。現在

    <module name="TreeWalker"> 
        ... 
        <module name="FileContentsHolder"/> 
        ... 
    </module> 
    

    您可以配置​​這是Checker模塊的一部分。

    <module name="Checker"> 
        ... 
        <module name="SuppressWithNearbyCommentFilter"> 
         <property name="commentFormat" value=".*deprecated.*"/> 
         <property name="checkFormat" value=".*"/> 
         <property name="influenceFormat" value="2"/> 
        </module> 
        ... 
    </module> 
    

    如果您決定只忽略特定檢查,請調整checkFormat屬性。或者如果您想使用其他評論,請更改commentFormat屬性。但是,非常重要的是,您將influenceFormat設置爲正確的值。它在checkstyle之後的多少行中告訴checkstyle忽略這些檢查。

P.S:需要注意的是在Eclipse的CheckStyle插件刪除FileContentsHolder模塊,當您更改的配置與它的用戶界面,所以你不能使用它。

+2

這太好了。完善! – 2009-11-10 14:32:02

相關問題