创建一个@Stub注释,该注释在Java中充当@Deprecated

创建一个@Stub注释,该注释在Java中充当@Deprecated,java,intellij-idea,annotations,jsr305,Java,Intellij Idea,Annotations,Jsr305,我想在Java中创建一个@Stub、@Example或@Mock注释,以指示某些类只是用于测试的。我还喜欢将这些类设置为不推荐类,以阻止我的库的用户使用它们。我喜欢做一些类似于JSR305中的@Nullable和其他注释的东西 我想到了这个: import javax.annotation.meta.TypeQualifierNickname; import java.lang.annotation.Retention; import java.lang.annotation.Retention

我想在Java中创建一个
@Stub
@Example
@Mock
注释,以指示某些类只是用于测试的。我还喜欢将这些类设置为不推荐类,以阻止我的库的用户使用它们。我喜欢做一些类似于JSR305中的
@Nullable
和其他注释的东西

我想到了这个:

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 {
}
不幸的是,尽管使用了
@typequalifier昵称
,但它与我的
@Stub
注释一样,被Intellij和javac编译器标记为不推荐使用,而不是目标注释类


有没有一种方法可以在不需要更改javac或IDE的情况下工作?

您需要编写一个自定义注释处理器作为

@Deprecated
注释适用于存根接口,而不适用于使用它的位置。 我做了一个快速搜索,但大多数示例只是在控制台上打印内容。这可能会有帮助


您需要编写一些逻辑来强制执行编程规则,即“不要使用
@Stub
注释调用方法”。您可以使用两个框架来实现这一点:和

缺点是库的用户每次编译代码时都需要运行工具。您需要编写指令,告诉他们如何调整构建过程以运行检查编程规则的工具