Я создал небольшой процессор аннотаций , который генерирует класс 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
.