2015-05-18 88 views
-1

我剛剛在我們的系統中發現了一類與使用ZoneOffset.UTC而不是ZoneId.of("UTC")和新的Java 8 ZonedDateTime API有關的錯誤。理想情況下,爲確保這些不會在將來再次出現,我想就我們的代碼庫中的任何地方使用ZoneOffset發出警告。有問題的類的使用警告

如果是在我們的代碼中,我會@Deprecated註釋類,這將解決問題。但是,因爲它在JVM庫中,我不能這樣做。

我們目前在構建系統中有PMD,Checkstyle和查找錯誤。如果需要其他東西,可能可以安排,但我寧願與其中之一的方式。

+0

爲什麼你關心的是內部使用這個屬性?更好的問題:如果你知道哪些*內部使用了這個屬性,你能否找到一種方法來避免它們的使用,如果它證明是有害的? – Makoto

+0

@Makoto我不在乎內部是否使用這個類。當我們的代碼使用這個類時,我關心當DST改變時ZoneOffset跟不上。在我們的測試和其他代碼中使用它並不是一個好主意,我可以推薦人們不要使用它,但我寧願有人在發現像我剛剛修復的bug之前得到警告。 –

回答

0

檢查風格有一個功能,以完成我所需要的功能。

該功能稱爲導入控制。要設置它,您需要添加以下作爲TreeWalker模塊的子項。我們已經爲此做了一個部分。您可能需要添加它。

<module name="ImportControl"> 
    <property name="file" value="import-control.xml"/> 
    </module> 

確保該文件的路徑對您的項目設置有效。如果您希望導致這些錯誤,您可以將severity屬性設置爲error

接下來,您需要在config中輸入的路徑上創建import-control.xml文件。它應該如下所示:

<?xml version="1.0"?> 
<!DOCTYPE import-control PUBLIC 
     "-//Puppy Crawl//DTD Import Control 1.1//EN" 
     "http://www.puppycrawl.com/dtds/import_control_1_1.dtd"> 
<import-control pkg="com.ijento.zeus"> 
    <allow class=".*" regex="true" /> 
    <disallow class="java.time.ZoneOffset" exact-match="true"/> 
</import-control> 

允許所有其他類都需要「allow all」標記。禁止停止導入您想要阻止的類。這些事情的順序。它似乎從上到下評估規則。如果「允許所有」在最底層,它允許任何事情。

更多細節可以在這裏找到:http://checkstyle.sourceforge.net/config_imports.html#ImportControl