From 4d49b4d6ec57bb0a6b2e11ffb009a8de1bd1b04d Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 21 Sep 2020 17:22:38 +0200 Subject: [PATCH] GH-568 Add support for casting resulting function as Runnable Resolves #568 --- .../function/context/catalog/SimpleFunctionRegistry.java | 8 +++++++- .../catalog/BeanFactoryAwareFunctionRegistryTests.java | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index 86e93fec1..f7b25698e 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -415,7 +415,8 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect * * @author Oleg Zhurakousky */ - public class FunctionInvocationWrapper implements Function, Consumer, Supplier { + public class FunctionInvocationWrapper implements Function, Consumer, + Supplier, Runnable { private final Object target; @@ -519,6 +520,11 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect return this.doApply(input, false, enricher); } + @Override + public void run() { + this.apply(null); + } + public Type getFunctionType() { return this.functionType; } 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 8aecbcaae..94d141929 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 @@ -484,6 +484,13 @@ public class BeanFactoryAwareFunctionRegistryTests { assertThat(f.apply("Bubbles")).isEqualTo("BUBBLES"); } + @Test + public void testSupplierConsumerAsRunnable() { + FunctionCatalog catalog = this.configureCatalog(SampleFunctionConfiguration.class); + Runnable f = catalog.lookup("numberword|imperativeConsumer"); + f.run(); + } + @EnableAutoConfiguration public static class PojoToMessageFunctionCompositionConfiguration {