Kotlin Annotation 处理器如何获取构造函数参数类型?
Kotlin Annotation processor how to get constructor argument types?
我正在用 Kotlin 编写注解处理器,我想获取构造函数参数的类型。
这是我的注释class
@SomeAnnotation
class MyClass(name: String, age: Int)
我可以从 annotatedElement.kotlinMetadata
中提取 String
和 Int
类型吗?或者我应该只使用 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
return 0 我应该有 2.
你的代码有两个错误:
- 您得到的是通用
typeParameters
而不是 parameters.map { it.type }
- 您正在尝试获取 constructor 参数,但您使用的是
annotatedElement
而不是 mainConstructor
纠正错误的方法如下:
mainConstructor?.parameters?.map { it.type }
我正在用 Kotlin 编写注解处理器,我想获取构造函数参数的类型。
这是我的注释class
@SomeAnnotation
class MyClass(name: String, age: Int)
我可以从 annotatedElement.kotlinMetadata
中提取 String
和 Int
类型吗?或者我应该只使用 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
return 0 我应该有 2.
你的代码有两个错误:
- 您得到的是通用
typeParameters
而不是parameters.map { it.type }
- 您正在尝试获取 constructor 参数,但您使用的是
annotatedElement
而不是mainConstructor
纠正错误的方法如下:
mainConstructor?.parameters?.map { it.type }