代码之家  ›  专栏  ›  技术社区  ›  tng

实现在所有分析完成后运行的JavaC编译器插件

  •  1
  • tng  · 技术社区  · 6 年前

    我正在编写一个插件,在分析阶段构建一些辅助数据,一旦分析了所有文件/类,我想对所有数据运行一个进程。

    今天的编译器框架只发送(通过TaskListener) ANALYZE GENERATE 事件,每个编译单元一个。我很惊讶 分析 然后 生成 每个编译单元的事件数与所有 分析 事件,然后是所有 生成 事件。

    我想要的是一个单一的事件,说“所有的分析都完成了”,但似乎没有这样一个事件。

    这样做的正确方法是什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ajax    6 年前

    我也谈到了这个问题,我想如果我编译10个类,我会得到每个文件的每个阶段,但它不是这样工作的。它一次编译一个文件,因此您可以一次获得每个文件的所有事件。我发现,如果您控制编译过程(即从java运行javac),那么您可以在编译器运行时收集所有分析事件,然后在编译完成后处理它们。

    然后,如果您想发出新的源代码,您可以这样做,自己再次运行编译器,并继续运行,直到输出稳定为止。

    它是。。。不太好。我还必须为“哦,我需要等待这三个类被分析/等等”连接我自己的回调集,这样每个分析都可以订阅它需要的内容,然后当遇到这些类型时,运行回调。

    也许有更好的策略,但我看到了这个孤独的问题,不想在没有关于我如何处理这些问题的提示的情况下离开。