Как заставить мой пользовательский процессор аннотаций для комнатных объектов работать до запуска процессора аннотаций в комнатах? - PullRequest
1 голос
/ 05 мая 2019

Я создал небольшой процессор аннотаций , который генерирует класс Kotlin для всех объектов комнаты с полями, представляющими имена столбцов. Я сделал это, чтобы использовать статическое конечное поле сгенерированного класса вместо необработанной строки в @ColumnInfo, @ForeignKey parentColumn, childColumn и т. Д.

Проблема в том, что когда я использую поле из сгенерированного класса, скажем, @ColumnInfo, вот так

@Entity(tableName = "DogTable")
data class Dog(

    @PrimaryKey
    @ColumnInfo(name = DogTableFields.ID) //DogTableFields class is generated from my annotation processor
    val id: String = ""
)

Я получаю сообщение об ошибке сборки: 1008 *

ошибка: значение элемента должно быть константным выражением @ androidx.room.ColumnInfo (name = null)

Я думаю, что процессор аннотаций компилятора Room запускается раньше моего процессора, и поэтому сгенерированное поле имеет значение null.

Мой вопрос: как мне запустить процессор аннотаций до запуска процессора Room? или есть другой способ заставить это работать?

Редактировать: это файл Dog.java , который создается в / app / build / tmp / kapt3 / stubs / debug, из которого отображается ошибка. Вы можете видеть, что @ColumnInfo имеет null для name.

...