我有很多处理程序类来处理特定的消息类型。为了注册所有这些处理程序,我需要知道哪些已存在。目前它们都用特定注释进行了注释,并且我使用Java 6注释处理器获取所有这些注释,并创建一个Register类,该类保存每个注释类型的实例。
如果整个树正在同时构建,则此方法非常有效,但是如果仅正在构建其中一个注释类(例如在Eclipse中保存文件时),处理器只会看到该类型,并构建一个不完整的Register。在此情况下,我如何检查其他类型?
我有很多处理程序类来处理特定的消息类型。为了注册所有这些处理程序,我需要知道哪些已存在。目前它们都用特定注释进行了注释,并且我使用Java 6注释处理器获取所有这些注释,并创建一个Register类,该类保存每个注释类型的实例。
如果整个树正在同时构建,则此方法非常有效,但是如果仅正在构建其中一个注释类(例如在Eclipse中保存文件时),处理器只会看到该类型,并构建一个不完整的Register。在此情况下,我如何检查其他类型?
毫不意外,编译时注解处理器只处理正在编译的文件。Eclipse使用增量编译来节省时间,因此简短的答案是你不能期望你的注解处理器在一次处理中看到所有类型。
一个解决方案是改变你的架构以支持增量编译。例如,对于每个已注解的HandlerClass
,生成一个RegisterHandlerClass
类来注册该处理程序类。
尽管如此,你正在进行的工作似乎最好在运行时完成,可能需要使用像Reflections这样的工具。