Kotlin Annotation 处理器如何获取构造函数参数类型?

标签 kotlin annotations

我正在用 Kotlin 编写一个注释处理器,我想获取构造函数参数的类型。

这是我带注释的类

@SomeAnnotation
class MyClass(name: String, age: Int)

我可以从 annotatedElement.kotlinMetadata 中提取 StringInt 类型吗?或者我应该只使用 annotatedElement (它是 TypeElement)?我怎样才能做到这一点?

这就是我陷入困境的地方:

val metadata = annotatedElement.kotlinMetadata as KotlinClassMetadata
val proto = metadata.data.classProto
val mainConstructor = proto.constructorList.find { it.isPrimary }
val parameters = annotatedElement.typeParameters

typeParameters 返回 0,我应该有 2。

最佳答案

您的代码中有两个错误:

  1. 您将获得通用的 typeParameters 而不是 parameters.map { it.type }
  2. 您正在尝试获取构造函数参数,但您使用的是annotatedElement而不是mainConstructor

以下是纠正它们的方法:

mainConstructor?.parameters?.map { it.type }

关于Kotlin Annotation 处理器如何获取构造函数参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953516/

相关文章:

java - 将注释属性传递给元注释

java - 通过StackTrace获取方法注解

注释和静态 block 的java处理顺序

android - FillMaxHeight、填充和包装内容在 JetpackCompose 中的行为不符合预期

android - 尝试检索列表时出现 Cloud Firestore 错误

具有多个 "parameter"的 Kotlin 枚举

python 3 : unit measures associated to variables

java - MPChartAndroid 库不显示标记 View

kotlin - "coroutine local"kotlin 中的变量

java - FetchType.LAZY 位于父级的 @OneToMany 上,FetchType.EAGER 位于子级的 @ManyToOne 上