正如我所知,没有办法控制处理器的执行顺序。
在这个示例中(请参阅下面的代码段(,您可以看到该模块依赖于AssistedInject类AssistedInject_MainModule
生成的。因此,如果Dagger 2将首先运行,则构建应该失败,因为此时AssistedInject_MainModule
不存在。
但它是可以编译的。它是如何工作的?
@AssistedModule
@Module(includes = AssistedInject_MainModule.class)
public abstract class MainModule {
@Provides static @Exclamation String provideExclamation() {
return "!";
}
}
据我所知,没有办法控制处理器的执行顺序。
我没有研究dagger2或AssistedInject是如何在引擎盖下工作的,但一般来说,注释处理是在多个回合中完成的。
注释处理在一系列循环中进行。在每一轮中,处理器可能被要求处理在前一轮生成的源文件和类文件上发现的注释的子集。
文件在这些回合中生成,但验证(和错误(发生在稍后或最后一轮,即生成和处理每个文件时。这在你链接的问题的第二个答案中也提到了。有人还写了一个关于轮次如何处理不同问题的详细答案。