From a3b45f4aa70da80bbab5fe0b41bc6b3e1b5b8523 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Sun, 24 Nov 2024 18:07:40 +0100 Subject: [PATCH] GH-1204 Polishing aftre refactoring of TypeTools --- .../context/FunctionRegistration.java | 3 +- .../BeanFactoryAwareFunctionRegistry.java | 4 ++ .../context/catalog/FunctionTypeUtils.java | 4 +- ...BeanFactoryAwareFunctionRegistryTests.java | 42 ------------------- 4 files changed, 7 insertions(+), 46 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionRegistration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionRegistration.java index 6e3b3666b..90a783979 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionRegistration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionRegistration.java @@ -121,7 +121,7 @@ public class FunctionRegistration implements BeanNameAware { if (KotlinDetector.isKotlinPresent() && this.target instanceof KotlinLambdaToFunctionAutoConfiguration.KotlinFunctionWrapper) { return this; } - Type discoveredFunctionType = FunctionTypeUtils.discoverFunctionTypeFromClass(this.target.getClass()); + Type discoveredFunctionType = type; //FunctionTypeUtils.discoverFunctionTypeFromClass(this.target.getClass()); if (discoveredFunctionType == null) { // only valid for Kafka Stream KStream[] return type. return null; } @@ -146,7 +146,6 @@ public class FunctionRegistration implements BeanNameAware { + discoveredFunctionType + "; Provided: " + type); } - return this; } diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index 468e277c2..1d1f7359f 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -180,6 +180,10 @@ public class BeanFactoryAwareFunctionRegistry extends SimpleFunctionRegistry imp else { functionType = FunctionTypeUtils.discoverFunctionType(functionCandidate, functionName, this.applicationContext); } + + if (logger.isDebugEnabled()) { + logger.debug("Discovered function type for: " + functionDefinition + " - " + functionType); + } if (functionRegistration == null) { functionRegistration = new FunctionRegistration(functionCandidate, functionName).type(functionType); } diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java index a516b13db..a06f23dc5 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java @@ -371,7 +371,7 @@ public final class FunctionTypeUtils { else { inputType = resolvableInputType.getType(); } - return inputType; + return inputType instanceof TypeVariable ? Object.class : inputType; } @SuppressWarnings("rawtypes") @@ -465,7 +465,7 @@ public final class FunctionTypeUtils { else { outputType = resolvableOutputType.getType(); } - return outputType; + return outputType instanceof TypeVariable ? Object.class : outputType; } public static Type getImmediateGenericType(Type type, int index) { diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java index 21fd8801d..05594b8ae 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java @@ -59,7 +59,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.function.context.FunctionCatalog; import org.springframework.cloud.function.context.FunctionRegistration; -import org.springframework.cloud.function.context.FunctionRegistry; import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.cloud.function.json.JsonMapper; import org.springframework.context.ApplicationContext; @@ -80,7 +79,6 @@ import org.springframework.util.ReflectionUtils; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.fail; /** * @@ -671,46 +669,6 @@ public class BeanFactoryAwareFunctionRegistryTests { assertThat(f.apply(Flux.just(25)).blockFirst()).isEqualTo(25); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Test - public void testRegisteringWithTypeThatDoesNotMatchDiscoveredType() { - FunctionCatalog catalog = this.configureCatalog(EmptyConfiguration.class); - Function func = catalog.lookup("func"); - assertThat(func).isNull(); - FunctionRegistry registry = (FunctionRegistry) catalog; - try { - FunctionRegistration registration = new FunctionRegistration(new MyFunction(), "a") - .type(FunctionTypeUtils.functionType(Integer.class, String.class)); - registry.register(registration); - fail(); - } - catch (IllegalArgumentException e) { - // good as we expect it to fail - } - // - try { - FunctionRegistration registration = new FunctionRegistration(new MyFunction(), "b") - .type(FunctionTypeUtils.functionType(String.class, Integer.class)); - registry.register(registration); - fail(); - } - catch (IllegalArgumentException e) { - // good as we expect it to fail - } - // - FunctionRegistration c = new FunctionRegistration(new MyFunction(), "c") - .type(FunctionTypeUtils.functionType(String.class, String.class)); - registry.register(c); - // - FunctionRegistration d = new FunctionRegistration(new RawFunction(), "d") - .type(FunctionTypeUtils.functionType(Person.class, String.class)); - registry.register(d); - // - FunctionRegistration e = new FunctionRegistration(new RawFunction(), "e") - .type(FunctionTypeUtils.functionType(Object.class, Object.class)); - registry.register(e); - } - @SuppressWarnings({ "unchecked", "rawtypes" }) @Test public void testNoConversionOnInputMapIfInputIsMap() {