在上一轮创建的类型[生成的java文件的路径]的文件不受注释处理

时间:2015-01-11 10:44:02

标签: java annotation-processing

我编写了一个AnnotationProcessor来扫描代码以获取某个注释,并从中生成一个Java类。 它基本上是这样的:

  private Multimap<String, Element> elements;

 @Override
  public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

    for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Factory.class)) {

        elements.put(annotatedElement.getSimpleName());
    }

   generateCode(elements);
}

以防万一: generateCode()将迭代elements,这是一个多图,并为每个键创建一个类(键+ SUFFIX是我想要生成的文件的名称),其中包含根据列表信息创建的代码与键相关联的元素(某个键的mulitimap的值)。

显然,我会在每一轮注释处理中调用generateCode()。因此,我将收到一个编译错误,指出在上一轮中已经生成了同名文件。

处理这个问题的正确方法是什么?我认为收集所有注释并仅在最后一轮生成类是一个好主意,如下所示:

  private Multimap<String, Element> elements;

 @Override
  public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

    for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Factory.class)) {

        elements.put(annotatedElement.getSimpleName());
    }

   if (roundEnv.processingOver()){
      generateCode(elements);
   }
}

这解决了多次生成同一文件的问题,但现在我收到以下警告:

警告:java:上一轮创建的类型[生成的java文件的路径]的文件不受注释处理。

javadoc声明你不应该在上一轮中生成代码。 我什么时候应该生成我的文件?

此外,如果我点击重建项目,我也会在IntelliJ 14中收到此警告: 警告:输出路径[生成的java文件的路径]与源根相交。只清理由build创建的文件。

0 个答案:

没有答案