在注释处理阶段获取kotlin fun参数的默认值

时间:2019-06-14 16:31:25

标签: kotlin annotation-processing

背景: 我有一个注释处理器,它通过扫描控制器上的弹簧注释来构建改造接口。我已经设置它可以在基于Kotlin或Java的Spring应用程序中工作,并且它可以生成Kotlin或Java改造客户端接口。

问题: 在基于Kotlin的spring应用程序上运行它时,是否可以通过反射或其他方式在控制器功能上获取默认值?

例如控制器功能类似于

@RequestMapping("/foo")
fun getSomething(@RequestParameter foo: String = "bar") {
...

}

并且我希望能够生成一个类似

的改造接口方法
fun getSomething(@Header foo: String = "bar")

我知道引擎盖下的编译器实际上为jvm创建了多个重写方法: https://discuss.kotlinlang.org/t/retrieve-default-parameter-value-via-reflection/7314

但是我想知道是否有一种方法可以在注释处理阶段捕获这些默认值,或者我是否只需要在生成的kotlin客户端中不使用默认值即可生存。

长话短说-是否有一种解决方法可以让我捕获这些默认值?

1 个答案:

答案 0 :(得分:2)

可悲的是,您似乎无法做到这一点:( https://discuss.kotlinlang.org/t/kotlin-reflection-and-default-values/2254这个想法很有趣。我不确定是否需要为此分析字节码吗?

这也很有意义,因为默认值也可以来自常量之类的东西,常量又可以是计算值。如果默认参数是通过计算得出的常数设置的,则在运行时加载该参数之前,无法确定它的状态。