From 6644130297a284088d4e4306737a5b3b0b1f0da1 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 4 Apr 2019 21:02:23 +0200 Subject: [PATCH] Polished FunctionType experimental constructor --- .../cloud/function/context/FunctionType.java | 46 +++++++------------ .../AbstractComposableFunctionRegistry.java | 3 -- .../FunctionCreatorConfiguration.java | 3 -- 3 files changed, 17 insertions(+), 35 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionType.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionType.java index e4655f352..c09cd8379 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionType.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionType.java @@ -17,6 +17,7 @@ package org.springframework.cloud.function.context; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; @@ -27,6 +28,7 @@ import java.util.function.Supplier; import reactor.core.publisher.Flux; + import org.springframework.core.ResolvableType; import org.springframework.core.io.support.SpringFactoriesLoader; import org.springframework.messaging.Message; @@ -47,17 +49,17 @@ public class FunctionType { private static List transformers; - final private Type type; + private Type type; - final private Class inputType; + private Class inputType; - final private Class outputType; + private Class outputType; - final private Class inputWrapper; + private Class inputWrapper; - final private Class outputWrapper; + private Class outputWrapper; - final private boolean message; + private boolean message; public FunctionType(Type type) { this.type = functionType(type); @@ -74,29 +76,15 @@ public class FunctionType { */ @SuppressWarnings("unused") // it is used private FunctionType(Object functionType) throws Exception { - Field field = ReflectionUtils.findField(functionType.getClass(), "type"); - field.setAccessible(true); - this.type = (Type) field.get(functionType); - - field = ReflectionUtils.findField(functionType.getClass(), "inputWrapper"); - field.setAccessible(true); - this.inputWrapper = (Class) field.get(functionType); - - field = ReflectionUtils.findField(functionType.getClass(), "outputWrapper"); - field.setAccessible(true); - this.outputWrapper = (Class) field.get(functionType); - - field = ReflectionUtils.findField(functionType.getClass(), "inputType"); - field.setAccessible(true); - this.inputType = (Class) field.get(functionType); - - field = ReflectionUtils.findField(functionType.getClass(), "outputType"); - field.setAccessible(true); - this.outputType = (Class) field.get(functionType); - - field = ReflectionUtils.findField(functionType.getClass(), "message"); - field.setAccessible(true); - this.message = (boolean) field.get(functionType); + Field[] fields = functionType.getClass().getDeclaredFields(); + for (Field field : fields) { + if (!Modifier.isStatic(field.getModifiers())) { + field.setAccessible(true); + Field thisField = ReflectionUtils.findField(this.getClass(), field.getName()); + thisField.setAccessible(true); + thisField.set(this, field.get(functionType)); + } + } } public static boolean isWrapper(Type type) { diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java index 5992dba2e..e26b7f3a0 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/AbstractComposableFunctionRegistry.java @@ -330,9 +330,6 @@ public abstract class AbstractComposableFunctionRegistry implements FunctionRegi private FunctionRegistration find(String name, boolean supplierFound) { Object result = this.functions.get(name); -// if (result == null) { -// result = this.functions.get(name); -// } if (result == null && !StringUtils.hasText(name)) { if (supplierFound && this.getFunctionNames().size() == 1) { result = this.functions.get(this.getFunctionNames().iterator().next()); diff --git a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java index ed62183d2..2bca8a435 100644 --- a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java +++ b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java @@ -629,9 +629,6 @@ class FunctionCreatorConfiguration { } } registration.type(this.createFunctionType(functionCatalog)); - - - //registration.type(type.getType()); } } else {