|
36 | 36 | import org.springframework.beans.BeansException; |
37 | 37 | import org.springframework.beans.factory.BeanFactory; |
38 | 38 | import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils; |
| 39 | +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; |
39 | 40 | import org.springframework.cloud.function.context.FunctionProperties; |
40 | 41 | import org.springframework.cloud.function.context.FunctionRegistration; |
41 | 42 | import org.springframework.cloud.function.context.FunctionRegistry; |
42 | 43 | import org.springframework.cloud.function.context.config.FunctionContextUtils; |
43 | | -import org.springframework.cloud.function.context.config.KotlinLambdaToFunctionAutoConfiguration; |
| 44 | +import org.springframework.cloud.function.context.config.KotlinLambdaToFunctionFactory; |
44 | 45 | import org.springframework.cloud.function.context.config.RoutingFunction; |
45 | 46 | import org.springframework.cloud.function.core.FunctionInvocationHelper; |
46 | 47 | import org.springframework.cloud.function.json.JsonMapper; |
@@ -120,7 +121,8 @@ public <T> T lookup(Class<?> type, String functionDefinition, String... expected |
120 | 121 | functionDefinition = StringUtils.hasText(functionDefinition) |
121 | 122 | ? functionDefinition |
122 | 123 | : this.applicationContext.getEnvironment().getProperty(FunctionProperties.FUNCTION_DEFINITION, ""); |
123 | | - if (!this.applicationContext.containsBean(functionDefinition) || !KotlinUtils.isKotlinType(this.applicationContext.getBean(functionDefinition))) { |
| 124 | + |
| 125 | + if (!this.applicationContext.containsBean(functionDefinition) || !isKotlinType(functionDefinition)) { |
124 | 126 | functionDefinition = this.normalizeFunctionDefinition(functionDefinition); |
125 | 127 | } |
126 | 128 | if (!isFunctionDefinitionEligible(functionDefinition)) { |
@@ -160,12 +162,9 @@ public <T> T lookup(Class<?> type, String functionDefinition, String... expected |
160 | 162 | else if (functionCandidate instanceof BiFunction || functionCandidate instanceof BiConsumer) { |
161 | 163 | functionRegistration = this.registerMessagingBiFunction(functionCandidate, functionName); |
162 | 164 | } |
163 | | - else if (KotlinUtils.isKotlinType(functionCandidate)) { |
164 | | - KotlinLambdaToFunctionAutoConfiguration.KotlinFunctionWrapper wrapper = |
165 | | - new KotlinLambdaToFunctionAutoConfiguration.KotlinFunctionWrapper(functionCandidate); |
166 | | - wrapper.setName(functionName); |
167 | | - wrapper.setBeanFactory(this.applicationContext.getBeanFactory()); |
168 | | - functionRegistration = wrapper.getFunctionRegistration(); |
| 165 | + else if (isKotlinType(functionName, functionCandidate)) { |
| 166 | + KotlinLambdaToFunctionFactory kotlinFactory = new KotlinLambdaToFunctionFactory(functionCandidate, this.applicationContext.getBeanFactory()); |
| 167 | + functionRegistration = kotlinFactory.getFunctionRegistration(functionName); |
169 | 168 | } |
170 | 169 | else if (this.isFunctionPojo(functionCandidate, functionName)) { |
171 | 170 | Method functionalMethod = FunctionTypeUtils.discoverFunctionalMethod(functionCandidate.getClass()); |
@@ -203,6 +202,17 @@ else if (this.isSpecialFunctionRegistration(functionNames, functionName)) { |
203 | 202 | return (T) function; |
204 | 203 | } |
205 | 204 |
|
| 205 | + private boolean isKotlinType(String functionDefinition) { |
| 206 | + Object fonctionBean = this.applicationContext.getBean(functionDefinition); |
| 207 | + return isKotlinType(functionDefinition, fonctionBean); |
| 208 | + } |
| 209 | + |
| 210 | + private boolean isKotlinType(String functionDefinition, Object fonctionBean) { |
| 211 | + ConfigurableListableBeanFactory beanFactory = this.applicationContext.getBeanFactory(); |
| 212 | + Type functionType = FunctionContextUtils.findType(functionDefinition, beanFactory); |
| 213 | + return KotlinUtils.isKotlinType(fonctionBean, functionType); |
| 214 | + } |
| 215 | + |
206 | 216 | @SuppressWarnings({ "rawtypes", "unchecked" }) |
207 | 217 | private FunctionRegistration registerMessagingBiFunction(Object userFunction, String functionName) { |
208 | 218 | Type biFunctionType = FunctionContextUtils.findType(this.applicationContext.getBeanFactory(), functionName); |
|
0 commit comments