Получить значение по умолчанию для параметра kotlin fun на этапе обработки аннотации - PullRequest
3 голосов
/ 14 июня 2019

Справочная информация: у меня есть процессор аннотаций, который создает модифицированные интерфейсы путем сканирования аннотаций пружин на контроллерах.Я настроил его для работы в Spring-приложениях на основе либо Kotlin, либо Java, и он может генерировать клиентские интерфейсы для модификации либо Kotlin, либо Java.

Вопрос: Есть ли способ при запуске его с помощью Spring-приложений на основе Kotlin?подобрать значение по умолчанию для функции контроллера, рефлексивно или с помощью других средств?

например, функция контроллера выглядит примерно так:

@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 Ответ

2 голосов
/ 19 июня 2019

Казалось бы, вы не можете этого сделать, к сожалению :( https://discuss.kotlinlang.org/t/kotlin-reflection-and-default-values/2254 идея интересная, хотя. Я не уверен, желательно ли для этого анализировать байт-код?

Это также имеет смысл, поскольку значение по умолчанию может также исходить от таких вещей, как константы, которые, в свою очередь, могут быть вычисленными значениями. Если параметр по умолчанию установлен через вычисляемую константу, то нет определенного способа узнать, каким он будет до того, как будет загружен во время выполнения.

...