Обновление до Kotlin 1.3.30 ломает сборку с помощью Dagger 2.21 - программирование
Подтвердить что ты не робот

Обновление до Kotlin 1.3.30 ломает сборку с помощью Dagger 2.21

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

4b9b3361

Ответ 1

Об этой ошибке уже сообщал кто-то на 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();
}

Ответ 2

Upgrade dagger version kotlin version до latest kotlin version

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

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

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

Котлин версия: - 1.3.41