Как использовать сгенерированный код в аннотации, используемой другим генератором? - PullRequest
0 голосов
/ 09 июля 2020

Я использую пол, и я написал генератор кода, используемый для создания классов DatabaseView. Например, был сгенерирован этот класс:

@DatabaseView(
    "SELECT name FROM audio",
    viewName: AppDatabase.TABLE_AUDIO_WITH_RECORDS_COUNT,
)
class TestDatabaseView {
  String name;

  AudioWithRecordsCount({this.name});
}

Затем я использую этот класс в аннотации @Database следующим образом:

@Database(version: 1, entities: [
  AudioEntity,
  ListeningRecordEntity,
], views: [
  TestDatabaseView,
])

Но когда я пытаюсь запустить пол, все сгенерирован, но код для DatabaseView. После некоторого расследования я обнаружил, что (в database_processor.dart floor_generator) следующий код возвращает null, когда я использую сгенерированные классы в списке представлений:

_classElement.getAnnotation(annotations.Database).getField(AnnotationField.databaseViews)

(Это означает, что я не могу прочитать список представлений, когда использую сгенерированные классы в нем). Вот результат, когда я распечатываю весь объект аннотации базы данных, загруженный методом getAnnotation:

Database (entities = List<Type> ([Type (AudioEntity), Type (ListeningRecordEntity)]); version = int (1); views = Null (null))

Я не нашел ничего, что говорит об этой проблеме, кроме этого Как запустить генератор кода на верх другого генератора кода? , сейчас я использую грязный обходной путь (скопируйте и вставьте сгенерированный код в исходный файл).

Я использовал ключ run_before в файле build.yaml моего генератора чтобы убедиться, что он запускается до этажа, выполните следующие действия: https://github.com/dart-lang/build/blob/master/build_config/README.md#defining -builders-to-apply-to-dependents

Есть ли способ использовать сгенерированные классы в аннотациях?

...