LoginSignup
6
6

More than 5 years have passed since last update.

Kotlin+Dagger2でkaptのバグ発生時の解決策

Last updated at Posted at 2016-01-29

kaptの実装で100%KotlinでもDagger2を使えるようになったが、まだバグがあるようだ。

以下のバージョンでの話なので注意。

kotlin_version = '1.0.0-beta-4589'
dagger_version = '2.1-SNAPSHOT'

実装したかったこと

@Scopeを使ってApplicationActivityで提供するものを変える。
ただし、提供するオブジェクトの型は同じで、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日潰した。
バグ報告の前にちゃんと確認しよう・・・

リンク

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6