如何从注释处理器进程的构造函数 Java 元素对象中获取参数。使用 Kotlin 数据 Class
How do I get parameters from constructors Java Element object from Annotation Processor process. using Kotlin Data Class
目前我正在尝试这样:
element.enclosedElements.filter { it.kind == ElementKind.FIELD }.filter {
it.modifiers.contains(Modifier.FINAL) &&
!it.modifiers.contains(Modifier.STATIC)
}
但是这种方式的问题是它也返回了不在构造函数中的成员字段。
data class Post(
val id: Int,
val title: String,
val content: String?,
val a: Char,
val b: Char?,
val author_id: Int?,
val is_public: Boolean,
val is_updated: Boolean?,
) {
private val myCustomField = true // I don't need this field when processing this class in annotation processor.
}
注意:我试过这个库:https://github.com/Takhion/kotlin-metadata但是这个库不支持最新版本的 Kotlin。
谢谢。
假设只有一个public构造函数(如果存在多个构造函数将抛出异常IllegalArgumentException
):
(element.enclosedElements.single {
it.kind == ElementKind.CONSTRUCTOR && it.modifiers.contains(Modifier.PUBLIC)
} as ExecutableElement).parameters
正在获取所有 public 个构造函数。
val publicConstructors = element.enclosedElements.filter {
it.kind == ElementKind.CONSTRUCTOR && it.modifiers.contains(Modifier.PUBLIC)
}.map { it as ExecutableElement }
目前我正在尝试这样:
element.enclosedElements.filter { it.kind == ElementKind.FIELD }.filter {
it.modifiers.contains(Modifier.FINAL) &&
!it.modifiers.contains(Modifier.STATIC)
}
但是这种方式的问题是它也返回了不在构造函数中的成员字段。
data class Post(
val id: Int,
val title: String,
val content: String?,
val a: Char,
val b: Char?,
val author_id: Int?,
val is_public: Boolean,
val is_updated: Boolean?,
) {
private val myCustomField = true // I don't need this field when processing this class in annotation processor.
}
注意:我试过这个库:https://github.com/Takhion/kotlin-metadata但是这个库不支持最新版本的 Kotlin。
谢谢。
假设只有一个public构造函数(如果存在多个构造函数将抛出异常IllegalArgumentException
):
(element.enclosedElements.single {
it.kind == ElementKind.CONSTRUCTOR && it.modifiers.contains(Modifier.PUBLIC)
} as ExecutableElement).parameters
正在获取所有 public 个构造函数。
val publicConstructors = element.enclosedElements.filter {
it.kind == ElementKind.CONSTRUCTOR && it.modifiers.contains(Modifier.PUBLIC)
}.map { it as ExecutableElement }