@AutoAnnotation для Dagger 2 Multibinding Tutorial не работает. Как заставить это работать? - PullRequest
0 голосов
/ 06 октября 2019

В отношении https://dagger.dev/multibindings.html, есть раздел, в котором говорится о @AutoAnnotation

class MyComponentTest {
  @Test void testMyComponent() {
    MyComponent myComponent = DaggerMyComponent.create();
    assertThat(myComponent.myKeyStringMap()
        .get(createMyKey("abc", Abc.class, new int[] {1, 5, 10}))
        .isEqualTo("foo");
  }

  @AutoAnnotation
  static MyKey createMyKey(String name, Class<?> implementingClass, int[] thresholds) {
    return new AutoAnnotation_MyComponentTest_createMyKey(name, implementingClass, thresholds);
  }
}

Почему-то у меня это никогда не получается.

Я добавляю в gradle следующее

    implementation 'com.google.auto.value:auto-value:1.5.2'
    annotationProcessor 'com.google.auto.value:auto-value:1.5.2'

А также добавляю

    android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true

1 Ответ

0 голосов
/ 09 октября 2019

Чтобы понять, как работают AutoAnnotation и Dagger 2, сначала мне нужно понять AutoValue

Пример AutoValue: ошибка: невозможно найти класс символов AutoValue_Animal

Затем выполнитепо AutoAnnotation

Для чего нужен @AutoAnnotation? Как это можно использовать?

После этого я мог бы изучить приведенный выше пример с Dagger 2 с помощью AutoAnnotation.

Короче говоря, AutoAnnotation - это библиотека генератора кода Java, которая генерирует ключ аннотации, эквивалентный значению, который можно использовать для работ с несколькими связываниями (поскольку классы Java не похожи на класс данных Kotlin, поэтому для их создания необходим такой инструмент). эквивалент по значению проще).

Пример, приведенный в документе Google AutoValue, не работает "из коробки". Требуется несколько модификаций, например: 1. Необходимо сделать общедоступным MyComponentTest, а также функцию. 2. Код AutoAnnotation должен быть не в тестовой папке, а в самой исходной папке. 3. Для работы AutoAnnotation с Dagger 2 нам понадобится следующая настройка

android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true

Я сделал пример кода в https://github.com/elye/demo_android_dagger_autoannotation

...