This PR adds:
- Support for Kotlin functions
- A Kotlin extension to FunctionCallbackWrapper.Builder
- Kotlin documentation for language specifics
It also removes the dependency on Spring Cloud Function and net.jodah:typetools
which are replaced by leveraging
Spring Framework RootBeanDefinition
and ResolvableType
capabilities.
Comment From: sdeleuze
@markpollack Forced-pushed to remove a RootBeanDefinition
cast which was not needed and rebased to fix a merge-conflict.
Comment From: markpollack
merged in 9cf66333b5f0e36753f1a74931a59b8ace68bdec
Comment From: sdeleuze
Reopening the PR after finding a regression and reverting related commit from main
.
Comment From: sdeleuze
I spent some time debugging the initial version of this PR that we had to revert after a regression detailed in #1685 and reproducible with @ThomasVitale repro.
The reason why our tests did not catch this regression is not straightforward. In our tests, ConfigurationClassParser
is creating AnnotationMetadata
via reflection (StandardAnnotationMetadata
) and with that, beanDefinition.getResolvableType()
works as expected because the function type is resolved via RootBeanDefinition#factoryMethodToIntrospect
but in the application that reproduces the issue, the AnnotationMetadata
is a SimpleAnnotationMetadata
created via ASM where beanDefinition.getResolvableType()
is unable to resolve the type.
Generally speaking, BeanDefinition#getResolvableType()
is a sort of best-effort representation of the currently known time information at runtime, so I have added a fallback resolution using the factory method, duplicating (for now) ConstructorResolver#resolveFactoryMethodIfPossible
logic which is not exposed in the public API. We may expose that in a future version of Spring Framework.
I have added related tests using tests that involve scanning to trigger the ASM code path. Both tests and @ThomasVitale repro are green with that new version I forced pushed, and Open AI IT tests seems to be fine as well.
There still may be some small differences with original SCF algorithm, but I guess we could refine with proper test if something is not supported yet.
Comment From: sdeleuze
Notice that suspending functions are not yet supported a discussed in that comment.
Comment From: tzolov
rebased, squashed and merged at c3c95a82c16e0e80f9cc34973801a4eb2298a0bd