|
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