2016-09-15 31 views
1

讀取CheckStyle文檔的檢查JavadocMethod我不明白屬性logLoadErrors瞭解CheckStyle檢查「JavadocMethod」屬性「logLoadErrors」

在那裏,我們被告知

該檢查可能需要加載在@throws標籤提到的異常類,以檢查它們是否RuntimeExceptions。如果加載類失敗,該屬性允許控制checkstyle的錯誤處理。如果設置爲false,則假定類路徑配置問題,並且TreeWalker完全停止對類的操作。如果設置爲true(缺省值),checkstyle假定javadoc中存在拼寫錯誤或重構問題,並將問題記錄在正常的checkstyle報告中(可能會掩蓋配置錯誤)。

當logLoadErrors被設置爲true時,TreeWalker全部處理的一類,並且顯示與裝入異常如CheckStyle的侵犯任何問題:

此外如下屬性suppressLoadErrors進行說明。當此屬性設置爲true時,logLoadErrors設置爲true時生成的違規行爲將被抑制爲在檢查樣式報告中被報告爲違規行爲。

我首先想到的是,在標準配置logLoadErrors = true, suppressLoadErrors = false的CheckStyle給出了一個警告,如果在@throws標籤中提到的異常類是找不到的。我試過了這個例子:

/** 
    * Returns if the first of two given numbers is smaller than the other one. 
    * @param a Description param a 
    * @param b Description param b 
    * @throws Exception bla 
    * @throws MyException foo 
    */ 
public boolean javadocMethod(int a, int b) throws Exception, MyException { 
    return a < b; 
} 

我想我會得到上運行的CheckStyle因爲該類MyException不存在的警告。但我沒有得到任何警告。有些人能提供另一個例子嗎

回答

0

這是一個非常好的問題,它涉及Checkstyle工具的一個更加陡峭的區域。事實上,在JavadocMethodCheck的父類,AbstractTypeAwareCheck的源代碼,它說:

的Checkstyle不知道類型的工具,從這個類派生的所有檢查都是潛在的不穩定。

在我看來,這有點悲觀,因爲如果配置正確,其邏輯應該工作得很好,但當然這取決於運行時的實際類路徑配置。

Checkstyle code,選擇你問這樣的作品(這裏簡化爲僞代碼):

protected void logLoadErrorImpl(int lineNo, int columnNo, ...) { 
    if (!logLoadErrors) { 
     // throw an exception 
    } 
    if (!suppressLoadErrors) { 
     // report a Checkstyle violation 
    } 
} 

所以,每當Checkstyle的嘗試加載類(在你的情況,MyException),這失敗,它將評估這些標誌以確定要執行的操作。

如果您信任您的類路徑(我們通常會這樣做),您想突出顯示Javadoc中的錯誤,因此您應該將suppressLoadErrors設置爲false。如果你不相信你的類路徑,你可以將suppressLoadErrors設置爲true。您絕不會將logLoadErrors更改爲默認值true以外的值,因爲這會阻止Checkstyle執行其他有意義的操作。

你的榜樣其實對我產生警告,如果我從throws條款刪除不存在異常:

不編譯往往不會被髮送到代碼質量工具
/** 
* Returns if the first of two given numbers is smaller than the other one. 
* @param a Description param a 
* @param b Description param b 
* @throws Exception bla 
* @throws MyException foo 
*/ 
public boolean javadocMethod(int a, int b) throws Exception { 
    return a < b; 
} 

代碼(或僅在以前的本地版本),所以這可能是您的IDE的特殊性。

此答案基於Checkstyle 7.1.1。希望它散發出一些光芒!