繁体   English   中英

创建自定义AbstractProcessor并与Eclipse集成

[英]Creating a custom AbstractProcessor and integrating with Eclipse

我正在尝试创建一个新的注释,我将在其中进行一些运行时布线,但是,由于多种原因,我想在编译时验证我的布线是否会成功进行一些基本检查。

假设我创建了一个新注释:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation{
}

现在我想在编译时进行某种验证,比如检查CustomAnnotation注释的字段是否为特定类型: ParticularType 我在Java 6中工作,所以我创建了一个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并在高级下检查我的完全限定类显示。

我点击了“apply”,Eclipse提示重建项目,我点击了 - 但是没有错误,尽管有注释处理器。

我哪里做错了?


我使用javac作为

javac -classpath "..\bin;path\to\tools.jar" -processorpath ..\bin -processor com.example.CompileTimeAnnotationProcessor com\test\TestClass.java

与输出

@CustomAnnotation带注释的字段必须是ParticularType类型

要在编辑器中显示错误,需要在printMessage函数中标记导致错误的Element 对于上面的示例,这意味着编译时检查应使用:

processingEnv.getMessager().printMessage(Kind.ERROR,
    "@CustomAnnotation annotated fields must be of type ParticularType",
    e); // note we explicitly pass the element "e" as the location of the error

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM