当前位置: 首页 > 知识库问答 >
问题:

如何在IntelliJ增量构建中获得带有注释的所有元素?

洪浩
2023-03-14
@Annotation
class A {}
@Annotation
class B {}
class Module {
  String getModuleClasses() {
    return Arrays.asList(
      "org.example.A",
      "org.example.B"
    );
  }
}

这在Maven中起作用,但是当我修改a时,IntelliJ给我的注释处理器提供了一个RoundEnvironment,其中a作为单个根元素。

我知道Gradle通过将带有所有与注释匹配的源代码的假RoundEnvironment传递给注释处理器来支持聚合注释处理器的增量编译,但是IntelliJ似乎没有类似的内容。(也许Gradle项目除外?)

当IntelliJ只编译类A时,找到这两个类的最佳方法是什么?

共有1个答案

佴博实
2023-03-14
FileObject resource = processingEnv.getFiler()
                    .createResource(StandardLocation.CLASS_OUTPUT, "", "META-INF/annotatedtypes/"+fileName);
PrintWriter out = new PrintWriter(new OutputStreamWriter(resource.openOutputStream()));
            classes.forEach(out::println);
FileObject resource = processingEnv.getFiler()
                        .getResource(StandardLocation.CLASS_OUTPUT, "", "META-INF/annotatedtypes/"+fileName);
new BufferedReader(new InputStreamReader(resource.openInputStream())).lines().forEach(classes::add);

org.foo.bar.A
org.foo.bar.B

总之,在处理器中,您要执行以下操作

  • 从META-INF的文件中读取注册的类型
  • 获取用批注进行批注的元素。
  • 如果是最后一轮,只需用唯一记录集更新文件并生成代码。

您每轮都读取该文件,但只在最后一轮写入一次。

 类似资料:
  • 我喜欢用于bean声明等的注释,但现在我们有这么多具有顺序的bean(@取决于)。很难维护或浏览配置。 是否有任何工具可以根据您的所有bean注释提供“有效的Spring配置”信息?

  • 我的测试框架使用selenium的PageFactory和Lambok。我想编写一个方面来捕获测试流在运行时遇到的所有web元素。 一个典型的页面看起来像: @FindBy确定测试所处理的webelement。这样的页面有50页。 当使用PageFactory实例化页面时,将实例化webElement字段(使用与@FindBy中的值对应的webElement实例进行分配)。 我希望在实例化这些we

  • 问题内容: 我有一个使用Node.js和Express构建的Web应用程序。现在,我想用适当的方法列出所有已注册的路由。 例如,如果我执行过 我想检索一个对象(或等效的东西),例如: 这可能吗?如果可以,怎么办? 更新: 同时,我创建了一个名为get-routes的npm软件包,该软件包从给定的应用程序中提取路由,从而解决了此问题。当前,仅支持Express 4.x,但我想现在可以了。仅供参考。

  • 我有这个spring配置: 如何获取用Foo注释的所有bean的列表? 注意:

  • 问题内容: 我有这段代码来获取我需要的所有元素并进行一些处理。问题是我需要指定每个面板以获取其中的元素。 我想做这样的事情,并且不需要指定所有面板名称就可以获取所有元素。我该怎么做。下面的代码无法获取所有元素。 问题答案: 您可以编写一个递归方法并在每个容器上递归: 该站点提供了一些示例代码: 如果只需要直接子组件的组件,则可以将递归深度限制为2。

  • 问题内容: 有没有办法获取所有带有注释的Controller的列表?我想像这样使用它们: 谢谢! 问题答案: getBeansWithAnnotation() 如果您已使用控制器…对其进行注释: 然后