Build error after update from Kotling 1.3.21 to 1.3.30:
AppComponent.java:16: error: [Dagger/MissingBinding]
java.util.Map<java.lang.Class<? extends androidx.lifecycle.ViewModel>,
javax.inject.Provider<androidx.lifecycle.ViewModel>>
cannot be provided without an @Provides-annotated method.
Reproduced on two different projects with similar dependencies on Kotlin, Dagger and Architecture components.
I suspect it somehow related to the recent kapt updates in kotlin 1.3.30:
https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/
Tried to disable/enable the kapt options from the article, tried gradle clean, invalidate caches, nothing helps.
Only downgrading to 1.3.21 projects build successfully.
This bug was already reported by someone on GitHub and on YouTrack. This should be fixed once Kotlin version 1.3.31 gets released.
Update: Kotlin 1.3.31 is out, so make sure to update your Kotlin version!
The workaround for Kotlin 1.3.30 listed on GitHub is to use a Java annotation instead of Kotlin for ViewModelKey
, or you may downgrade back to Kotlin 1.3.21.
/**
* Workaround in Java due to Dagger/Kotlin not playing well together as of now
* https://github.com/google/dagger/issues/1478
*/
@MapKey
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewModelKey {
Class<? extends ViewModel> value();
}
Upgrade
dagger version and kotlin version to the latest
annotation class
should work.
Currently the latest version is :-
Dagger version :- 2.23.2
Kotlin version :- 1.3.41