以前のプロジェクトで書いたいくつかのボイラープレート コードを生成する単純な注釈プロセッサを (単なる楽しみのために) 作成しました。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()
}
}
生成されたクラスを自分で作成すると、すべてが完全に機能します。どういうわけか、コンパイル時に、注釈プロセッサによって生成されたときに短剣がクラスを見つけることができません。
ユーリー・クリコフの答えの後、
生成されたファイルは同じパッケージに含まれていますが、完全修飾名で参照されていることもわかります。それでも短剣はエラーを報告します。
誰かが実験したい場合は、githubリポジトリへのリンクを次に示します