Dagger 2 - 组件作用域编译错误

Dagger 2 - Component scoping compilation error

简单范围注释:

@Scope
@Retention(RUNTIME)
public @interface SimpleScope {
}

简单组件:

@SimpleScope
@Component
public interface SimpleComponent {
}

编译器错误:

error: Scoping annotations are only allowed on concrete types and 
@Provides methods

编译器错误实际上来自 Dagger 1 注释处理器。具体在这里:Dagger 1 ValidationProcessor。如果注解处理器发现任何接口被注解了 javax.inject.Scope 注解,它就会报告错误。即使 Dagger 1 没有以任何方式使用接口或作用域。

我们目前正在从 Dagger 1 迁移到 Dagger 2,因此两个注释处理器都运行在使用 Dagger 1 和 Dagger 2 的 Gradle 模块上。

一个解决方案是完全迁移每个 Gradle 模块,这样两个注释处理器就不必 运行 处理同一代码。然而,这并不总是那么容易。

我们的解决方案是派生 Dagger 1 并修改 ValidationProcessor,使其在接口是 Dagger 2 组件时不会失败。