2013-05-29 88 views
3

我正在編寫一個自定義檢查來查看某些類是否符合我們的體系結構,其中一個規則指出,如果一個類對它的名稱有某個前綴,它必須繼承某種類型的servlet直接或間接。檢查一個類是否間接繼承了另一個類的類


可用的檢查不包括這種情況下,與間接繼承被證明是一個challange測試,因爲我無法找到一種方式來獲得第一繼承類的助攻樹所以這樣的模式。 :

  • dummyClass1延伸dumDummy
  • dumDummy延伸realyImportantClass

會聽之任之。問題是:

  1. 我該如何訪問繼承類的Ast樹?
  2. 第一個想法是將.class轉換爲第一個繼承類,並檢查它是否可以完成?
  3. Checkstyle可以從.class文件中獲取Ast樹嗎?

在此先感謝,請提醒我,如果這個問題不清楚,我會很樂意提供儘可能多的信息可能

+0

'[如何編寫涉及間接繼承的Checkstyle自定義檢查?](http://stackoverflow.com/q/7773022/1005481)'的副本。 –

回答

2

你可以做以下檢查:

Class<?> dummyClass = DummyClass1.class; 
Class<?> reallyImportantClass = ReallyImportantClass.class; 
if(reallyImportantClass.isAssignableFrom(dummyClass)){ 
    return true; 
}else{ 
    return false; 
} 

請參閱: http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

+0

這是一個擁塞的方法,但是這個檢查通過預先提交鉤子運行在Svn服務器機器上,所以機器沒有相同的環境(類路徑等),所以使用它不會是一個選項,支票必須通過checkstyle完成 –

+0

爲什麼不將它作爲單元測試添加失敗? – jsurls

+0

時間,如果單元測試失敗,構建我們的持續集成工具(Jenkins)將在下一個版本中發送電子郵件給參與項目的所有團隊,這對於可能發生在一個或兩個文件中的架構違規而言太多了。在每次提交的時候,預提交鉤讓我們有機會及時向開發人員發出警告,以便他可以在本地進行更改。我也想看看checkstyle有多好:) –

相關問題