如何在会议室注释处理器启动之前使我的会议室实体自定义注释处理器运行?

时间:2019-05-05 20:05:37

标签: android kotlin android-room kapt

我制作了一个小的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

1 个答案:

答案 0 :(得分:0)

尝试重新排序注释处理器声明,将自定义注释处理器上移到房间上方。