2016-04-04 8 views
0

Javaで@Stub,@Exampleまたは@Mock注釈を作成して、一部のクラスがテスト用であることを示したいとします。また、私は、それらのクラスを使用しないように、私のライブラリのユーザーには推奨しないようにしたいと思っています。私は@NullableとJSR305の他のアノテーションに似たものを作るのが好きです。Javaで@Deprecatedとして機能する@Stubアノテーションを作成します。

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 { 
} 

残念ながら、@TypeQualifierNicknameを使用してのdispiteは、それがのIntelliJとjavacで廃止予定として私@Stub注釈がマークされるように縫い目ターゲットの注釈付きクラスの代わりにコンパイラ。

方法はありますか?これはjavacまたはIDEの変更を必要とせずに動作しますか?

答えて

0

あなたは

@Deprecated 

注釈がスタブ・インタフェースにはなく、それが使用される場合に適用されるカスタム注釈プロセッサを作成する必要があります。 私はクイック検索を行いましたが、ほとんどの例ではコンソール上のものが表示されます。これは、あなたが「@Stub注釈を持つメソッドを呼び出すことはありません」で、あなたのプログラミングルールを強制するためにいくつかのロジックを記述する必要があります

https://deors.wordpress.com/2011/10/08/annotation-processors/

0

を助けるかもしれません。そのために使用できる2つのフレームワークはChecker Frameworkerror-proneです。

コードをコンパイルするたびにライブラリのユーザーがツールを実行する必要があるという欠点があります。プログラミングルールをチェックするツールを実行するためのビルドプロセスの調整方法を説明する説明を書く必要があります。

関連する問題