我正在编写一个插件,在分析阶段构建一些辅助数据,一旦分析了所有文件/类,我想对所有数据运行一个进程。
今天的编译器框架只发送(通过TaskListener)ANALYZE
和GENERATE
个事件,每个编译单元一个。我感到惊讶的是,每个编译单元,ANALYZE
事件GENERATE
事件与所有ANALYZE
事件相比,然后是所有GENERATE
事件。
我想要的是一个单独的事件,说“所有分析都已完成”,但似乎没有这样的事件。
做这样的事情的正确方法是什么?
答案 0 :(得分:0)
我也遇到了这个问题,认为如果我编译10个类,我会得到每个文件的每个阶段,但这不是它的工作原理。它一次编译一个文件,因此您可以同时获取每个文件的所有事件。我发现如果你控制正在进行编译的进程(即你从java运行javac),那么你可以在编译器运行时收集所有的ANALYZE事件,然后在编译完成后处理它们。
然后,如果你想要发出新的源代码,你可以自己再次运行编译器,继续运行直到你的输出稳定。
这......不太好。我还必须连接我自己的回调集“哦,我需要等到这三个类被分析/等”,所以每个分析都可以订阅它需要的东西,然后当遇到这些类型时,运行那你的回调。
也许有更好的策略,但我看到了这个孤独的问题,并且不想在没有一些关于我如何解决问题的提示的情况下离开它。