kapt
の実装で100%KotlinでもDagger2を使えるようになったが、まだバグがあるようだ。
以下のバージョンでの話なので注意。
kotlin_version = '1.0.0-beta-4589'
dagger_version = '2.1-SNAPSHOT'
実装したかったこと
@Scope
を使ってApplication
とActivity
で提供するものを変える。
ただし、提供するオブジェクトの型は同じで、Application
では都度生成、Activity
内ではシングルトン扱い。
という感じのよくありそうなことをやろうとした。
実装
以下の様なモジュールを定義。
@Module class ApplicationModule {
@Provides @ApplicationScope fun provideString() = "Application"
}
@Module class ActivityModule {
@Provides @ActivityScope fun provideString() = "Activity"
}
バグの内容
通常はDagger-Compilerにより@Provides
それぞれにProvider
クラスが生成されるのだが、これをコンパイルしたら、Provider
クラスがだけが生成されず、javac
でエラーになってしまう。
Dagger2 Issuesで報告してみたが、Kotlinのバグだと返されたので、KotlinのIssueTrackerへ。
探していると全く同じ報告がすでにあり、解決策も記述してあった。
解決策
メソッド名を変えるだけで良い。
@Module class ApplicationModule {
@Provides @ApplicationScope fun provideString() = "Application"
}
@Module class ActivityModule {
@Provides @ActivityScope fun provideString() = "Activity"
}
まとめ
1日潰した。
バグ報告の前にちゃんと確認しよう・・・