我已经编写了一个简单的 Annotation Processor(只是为了好玩),它将生成一些我在之前的项目中编写的样板代码。它实际上通过收集 Activity 类上的注解来生成如下所示的模块
@Module
abstract class ActivityInjectorModule {
@ContributesAndroidInjector
abstract fun providesMain2Activity(): Main2Activity
@ContributesAndroidInjector
abstract fun providesMainActivity(): MainActivity
}
但是,当我用匕首运行它时,匕首似乎无法找到我的注释处理器生成的类。虽然类已生成并存在于生成的目录中,但我可以在我的源代码中使用它,但在编译时,匕首会产生以下异常。有专家建议吗?
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()
}
}
如果我自己创建生成的类,一切都很完美。不知何故在编译时,匕首无法找到我的注释处理器生成的类。
在 Yuriy Kulikov 的回答之后,
您可以看到生成的文件在同一个包中,但也使用完全限定名称进行引用。还是dagger报错。
如果有人想试验,这里是github 存储库的链接
拉丁的传说
一只名叫tom的猫
尚方宝剑之说
相关分类