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

时间:2016-04-04 15:21:25

标签: java intellij-idea annotations jsr305

我想在Java中创建protected void dropdown1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList dropdown1 = sender as DropDownList; GridViewRow row = dropdown1.NamingContainer as GridViewRow; // Do something with row or with row.RowIndex } @Stub@Example注释,以表明某些类仅用于测试。另外,我喜欢将这些类视为不推荐使用,以阻止我的库用户使用它们。我喜欢在JSR305中创建类似@Mock和其他注释的东西。

我想出了这个:

@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 { } ,它的接缝就像我的@TypeQualifierNickname注释被Intellij和javac编译器标记为弃用而不是目标注释类。

有没有办法,这可以在不需要更改javac或IDE的情况下工作?

2 个答案:

答案 0 :(得分:1)

您需要编写一些逻辑来强制执行您的编程规则,而不是使用@Stub注释"来调用方法。您可以使用的两个框架是Checker Frameworkerror-prone

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

答案 1 :(得分:0)

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

@Deprecated

注释适用于Stub接口,而不适用于它的使用位置。 我做了一个快速搜索,但大多数例子只是在控制台上打印东西。这可能会有所帮助

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