2012-06-15 59 views
10

在Java 5和Java 6之間,有關@Override註解(源於接口的方法(與超類相對))的規則已更改 - 在它們未被允許之前,但在它們之後。但是,它們不是所需的由javac。如何靜態檢測缺少的@Override註釋?

一些像eclipse這樣的IDE可能會爲這些丟失的覆蓋產生錯誤或警告。我正在尋找任何可以檢測丟失覆蓋的靜態分析工具,所以我可以以編程方式報告/阻止它們。

它似乎並不像我findbugs等人可以做到的那麼大 - 可能是因爲@Override只有源保留級別,所以不存在於這些工具的.class文件中操作和源代碼級別的工具(如checkstyle)不瞭解完整的類層次結構。

+0

當我調用checkstyle時,沒有類路徑的地方。對checkstyle檢查來說,這很好,但checkstyle如何知道我的'void doStuff()'會覆蓋你的'void doStuff()'方法,而無需使用類(無論是在源代碼還是classpath中)。 – emory

+0

是的,所以即使除了運行時間保留問題之外,checkstyle只是對文件進行「本地」檢查,可能無法檢測到這一點。 – BeeOnRope

+0

我不明白爲什麼保留是一個問題。檢查器將需要訪問您的源代碼和您的依賴關係的類文件。它不需要訪問你的依賴關係的源代碼。 (如果在源代碼中發現缺少'@ Override',表示您沒有寫權限,您會怎麼做?) – emory

回答

3

您只需在Eclipse中啓用保存操作即可自動添加缺少的@Override註釋 - 請參閱窗口>首選項> Java>編輯器>保存操作>缺少代碼>添加缺少的註釋。

+0

是的,但問題出在一個有許多不同的IDE和非IDE開發環境的環境中,你不能保證每個人都會這樣做。我的目標是檢測缺失的案例,而不是更改現有的開發工具以確保缺少它們。 – BeeOnRope

+0

那麼,在這個問題中,你會說「阻止他們首先進入我們的代碼庫」。所以我不確定你想要什麼。 –

+0

這樣的檢查可以在「預檢入」系統中完成,該系統在源進入主源庫之前對其進行驗證。無論如何,這部分並不是真正相關的,所以我會刪除/澄清它。 我只需要一個可以檢測這些問題的自動化工具。 – BeeOnRope

1

您顯然需要處理Java源代碼的東西,並且可以訪問代碼結構和屬性。

我知道Eclipse在JDT中有一些解析機制,你也許可以使用它。

我們的DMS Software Reengineering Toolkit具有完整的Java源代碼解析器(包括屬性捕獲),全名和類型解析以及能夠一次讀取多個源文件。 DMS旨在讓您構建自己的自定義分析工具,因此您可以定義堅持屬性存在或不存在的條件。

因爲DMS還提供程序轉換功能,所以您甚至可以定義自定義規則,這些自定義規則將修改源代碼的位置,以明確應顯示哪些屬性。

DMS和Java語言規則不是微不足道的學習;這需要一些努力來配置。但是如果你真的有成千上萬的開發者,那麼這個代價就會被無法控制他們正在做的事情所淹沒,所以這個投資是有道理的。

0

JArchitect可以通過使用CQLinq像這樣

從噸類型哪裏!t.HasAnnotation exceute要求解決您的問題(「覆蓋」)選擇了•

當然,你可以根據您的喜好定製您的查詢以添加其他條件。