创建自定义抽象处理器并与 Eclipse 集成
2022-09-01 21:18:26
我正在尝试创建一个新的注释,我将用它来做一些运行时连接,但是,出于多种原因,我想在编译时验证我的连接是否成功,并进行一些基本的检查。
假设我创建了一个新的注释:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation{
}
现在我想在编译时做某种验证,比如检查注释的字段是否属于特定类型:。我在Java 6中工作,所以我创建了一个:CustomAnnotation
ParticularType
AbstractProcessor
@SupportedAnnotationTypes("com.example.CustomAnnotation")
public class CompileTimeAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(CustomAnnotation.class);
for(Element e : elements){
if(!e.getClass().equals(ParticularType.class)){
processingEnv.getMessager().printMessage(Kind.ERROR,
"@CustomAnnotation annotated fields must be of type ParticularType");
}
}
return true;
}
}
然后,根据我找到的一些说明,我创建了一个文件夹并创建了一个包含以下内容的文件:META-INF/services
javax.annotation.processing.Processor
com.example.CompileTimeAnnotationProcessor
然后,我将项目导出为 jar。
在另一个项目中,我构建了一个简单的测试类:
public class TestClass {
@CustomAnnotation
private String bar; // not `ParticularType`
}
我按如下方式配置了 Eclipse 项目属性:
- 设置 Java 编译器 -> 注释处理:“启用注释处理”和“在编辑器中启用处理”
- 设置 Java 编译器 -> 注释处理 ->工厂路径以包含我导出的 jar,并在高级下检查我的完全限定类是否显示。
我点击了“应用”,Eclipse提示重建项目,我点击了OK - 但是没有抛出任何错误,尽管有注释处理器。
我哪里做错了?
我运行这个使用作为javac
javac -classpath "..\bin;path\to\tools.jar" -processorpath ..\bin -processor com.example.CompileTimeAnnotationProcessor com\test\TestClass.java
带输出
@CustomAnnotation带注释的字段必须属于特定类型