我制作了一个小的annotation processor,它会为所有房间实体生成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 = ""
)
我收到构建错误提示
错误:元素值必须是一个常量表达式 @ androidx.room.ColumnInfo(name = null)
我认为Room编译器的注释处理器在我的处理器之前运行,这就是为什么生成的字段为null。
我的问题是,如何在Room的处理器运行之前使注释处理器运行?还是有其他方法可以使这项工作完成?
编辑:这是Dog.java file,它在显示错误的/ app / build / tmp / kapt3 / stubs / debug下生成。您可以看到,@ ColumnInfo的null
中有name
。
答案 0 :(得分:0)
尝试重新排序注释处理器声明,将自定义注释处理器上移到房间上方。