2016-04-04 132 views
0

我想在Java中創建一個@Stub@Example@Mock註釋以指示某些類僅用於測試。此外,我還希望將這些類作爲棄用來阻止我的庫的用戶使用它們。我喜歡在JSR305中做類似@Nullable和其他註釋。創建一個@Stub註釋,該註釋充當@Deprecated用Java

我想出了這一點:

import javax.annotation.meta.TypeQualifierNickname; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

import static java.lang.annotation.ElementType.*; 

@Deprecated 
@Retention(RetentionPolicy.RUNTIME) 
@TypeQualifierNickname 
@Target(value=TYPE) 
public @interface Stub { 
} 

和用例:

@Stub 
public final class SuperAwesome implements Feature { 
} 

不幸的是,dispite使用@TypeQualifierNickname的,它接縫像被打上我的@Stub註釋通過的IntelliJ和javac爲廢棄編譯器而不是目標註釋類。

有沒有辦法,這可能無需改變javac或IDE的工作?

回答

0

你需要編寫一些邏輯來執行你的編程規則,這是「不叫與@Stub標註方式」。您可以使用的兩個框架是Checker Frameworkerror-prone

不利之處在於,您的庫的用戶每次編譯代碼時都需要運行您的工具。您需要編寫說明,告訴他們如何調整構建過程以運行檢查編程規則的工具。