我已经写了一个简单的注解处理器(只是为了好玩),它将收集Activity类上的注解,并生成一些样板代码,这些代码在我的以前的项目中已经写过。实际上,它会生成一个类似于以下模块的模块:
@Module
abstract class ActivityInjectorModule {
@ContributesAndroidInjector
abstract fun providesMain2Activity(): Main2Activity
@ContributesAndroidInjector
abstract fun providesMainActivity(): MainActivity
}
然而,当我使用dagger运行它时,dagger似乎无法找到我的注解处理器生成的类。虽然该类已经生成并存在于生成的目录中,我可以在我的源代码中使用它,但在编译时,dagger会产生以下异常。有什么专家建议吗?
error: cannot find symbol
@dagger.Component(modules = {dagger.android.AndroidInjectionModule.class, com.mallaudin.daggietest.di.AppModule.class, ActivityInjectorModule.class})
^
symbol: class ActivityInjectorModule
这是主应用程序组件。
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
ActivityInjectorModule::class
]
)
interface AppComponent : AndroidInjector<App> {
@Component.Builder
interface Builder {
fun addContext(@BindsInstance ctx: Context): Builder
fun build(): AppComponent
}
}
ActivityInjectorModule类是由注解处理器生成的,存在于生成目录中。
应用程序类
class App : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().addContext(this).build()
}
}
如果我自己创建生成的类,一切都完美运作。但是在编译时,Dagger无法找到由我的注解处理器生成的类。{{}}
Yuriy Kulikov回答后,{{}}
您可以看到生成的文件与同一包中的完全限定名称引用。尽管如此,dagger仍然报告错误。
如果有人想要尝试,这里是指向github存储库的链接。