Обновление до Kotlin 1.3.30 ломает сборку с помощью Dagger 2.21 - PullRequest
28 голосов
/ 12 апреля 2019

Ошибка сборки после обновления с Kotling 1.3.21 до 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.

Воспроизведено в двух разных проектах с похожими зависимостями от компонентов Kotlin, Dagger и Architecture.

Я подозреваюэто как-то связано с последними обновлениями kapt в kotlin 1.3.30: https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/

Пытался отключить / включить опции kapt из статьи, пробовал чистить, отменять кеширование, ничего не помогает.Только понижение до 1.3.21 проектов успешно построено.

Ответы [ 2 ]

37 голосов
/ 12 апреля 2019

Эта ошибка уже сообщалась кем-то на GitHub и на YouTrack .Это должно быть исправлено после выпуска Kotlin версии 1.3.31.

Обновление: Kotlin 1.3.31 выпущен, поэтому обязательно обновите версию Kotlin!


Обходной путь для Kotlin 1.3.30, указанный на GitHub, заключается в использовании аннотации Java вместо Kotlin для ViewModelKey, или вы можете вернуться к 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();
}

0 голосов
/ 12 июля 2019

Upgrade версия кинжала и версия котлина до latest

annotation class должна работать.

В настоящее время последняя версияэто: -

версия кинжала : - 2.23.2

версия Kotlin : - 1.3.41

...