Strangle old inspector methods
Fixes gh-81
This commit is contained in:
@@ -110,33 +110,8 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMessage(String name) {
|
||||
return processor.isMessage(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getInputWrapper(String name) {
|
||||
return processor.findInputWrapper(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getOutputWrapper(String name) {
|
||||
return processor.findOutputWrapper(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getInputType(String name) {
|
||||
return processor.findInputType(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getOutputType(String name) {
|
||||
return processor.findOutputType(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object convert(String name, String value) {
|
||||
return processor.convert(name, value);
|
||||
public boolean isMessage(Object function) {
|
||||
return processor.isMessage(function);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -178,13 +153,10 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
private Set<String> suppliers = new HashSet<>();
|
||||
private Set<String> functions = new HashSet<>();
|
||||
private Set<String> consumers = new HashSet<>();
|
||||
private Map<String, String> beans = new HashMap<>();
|
||||
|
||||
private BeanDefinitionRegistry registry;
|
||||
private ConversionService conversionService;
|
||||
private Map<Object, String> registrations = new HashMap<>();
|
||||
// TODO: keys are not unique
|
||||
private Map<String, Object> reverse = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
|
||||
@@ -210,10 +182,6 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
: value;
|
||||
}
|
||||
|
||||
public Object convert(String name, String value) {
|
||||
return convert(reverse.get(name), value);
|
||||
}
|
||||
|
||||
public Set<FunctionRegistration<?>> merge(
|
||||
Map<String, FunctionRegistration<?>> initial,
|
||||
Map<String, Consumer<?>> consumers, Map<String, Supplier<?>> suppliers,
|
||||
@@ -281,11 +249,7 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
|
||||
private void wrap(FunctionRegistration<Object> registration, String key) {
|
||||
Object target = registration.getTarget();
|
||||
this.registrations.put(registration.getTarget(), key);
|
||||
for (String name : registration.getNames()) {
|
||||
beans.put(name, key);
|
||||
this.reverse.put(name, registration.getTarget());
|
||||
}
|
||||
this.registrations.put(target, key);
|
||||
if (target instanceof Supplier) {
|
||||
registration.target(target((Supplier<?>) target, key));
|
||||
}
|
||||
@@ -295,9 +259,7 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
else if (target instanceof Function) {
|
||||
registration.target(target((Function<?, ?>) target, key));
|
||||
}
|
||||
for (String name : registration.getNames()) {
|
||||
this.reverse.put(name, registration.getTarget());
|
||||
}
|
||||
registrations.remove(target);
|
||||
this.registrations.put(registration.getTarget(), key);
|
||||
}
|
||||
|
||||
@@ -384,23 +346,23 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
}
|
||||
|
||||
private boolean isFluxFunction(String name, Function<?, ?> function) {
|
||||
boolean fluxTypes = this.hasFluxTypes(name);
|
||||
boolean fluxTypes = this.hasFluxTypes(function);
|
||||
return fluxTypes || FunctionUtils.isFluxFunction(function);
|
||||
}
|
||||
|
||||
private boolean isFluxConsumer(String name, Consumer<?> consumer) {
|
||||
boolean fluxTypes = this.hasFluxTypes(name);
|
||||
boolean fluxTypes = this.hasFluxTypes(consumer);
|
||||
return fluxTypes || FunctionUtils.isFluxConsumer(consumer);
|
||||
}
|
||||
|
||||
private boolean isFluxSupplier(String name, Supplier<?> supplier) {
|
||||
boolean fluxTypes = this.hasFluxTypes(name);
|
||||
boolean fluxTypes = this.hasFluxTypes(supplier);
|
||||
return fluxTypes || FunctionUtils.isFluxSupplier(supplier);
|
||||
}
|
||||
|
||||
private boolean hasFluxTypes(String name) {
|
||||
return FunctionInspector.isWrapper(findInputWrapper(name))
|
||||
|| FunctionInspector.isWrapper(findOutputWrapper(name));
|
||||
private boolean hasFluxTypes(Object function) {
|
||||
return FunctionInspector.isWrapper(findInputWrapper(function))
|
||||
|| FunctionInspector.isWrapper(findOutputWrapper(function));
|
||||
}
|
||||
|
||||
private boolean isGenericSupplier(ConfigurableListableBeanFactory factory,
|
||||
@@ -569,10 +531,8 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
return ReflectionUtils.getField(field, target);
|
||||
}
|
||||
|
||||
private boolean isMessage(String name) {
|
||||
if (name != null) {
|
||||
name = beans.get(name);
|
||||
}
|
||||
private boolean isMessage(Object function) {
|
||||
String name = registrations.get(function);
|
||||
if (name == null || !registry.containsBeanDefinition(name)) {
|
||||
return false;
|
||||
}
|
||||
@@ -582,7 +542,6 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
|| Message.class.isAssignableFrom(findType(name,
|
||||
(AbstractBeanDefinition) registry.getBeanDefinition(name),
|
||||
ParamType.OUTPUT_INNER_WRAPPER));
|
||||
|
||||
}
|
||||
|
||||
private Class<?> findInputWrapper(Object function) {
|
||||
@@ -595,14 +554,6 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
ParamType.INPUT_WRAPPER);
|
||||
}
|
||||
|
||||
private Class<?> findInputWrapper(String name) {
|
||||
return findInputWrapper(function(name));
|
||||
}
|
||||
|
||||
private Object function(String name) {
|
||||
return reverse.containsKey(name) ? reverse.get(name) : null;
|
||||
}
|
||||
|
||||
private Class<?> findOutputWrapper(Object function) {
|
||||
String name = registrations.get(function);
|
||||
if (name == null || !registry.containsBeanDefinition(name)) {
|
||||
@@ -613,10 +564,6 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
ParamType.OUTPUT_WRAPPER);
|
||||
}
|
||||
|
||||
private Class<?> findOutputWrapper(String name) {
|
||||
return findOutputWrapper(reverse.get(name));
|
||||
}
|
||||
|
||||
private Class<?> findInputType(Object function) {
|
||||
String name = registrations.get(function);
|
||||
if (name == null || !registry.containsBeanDefinition(name)) {
|
||||
@@ -627,10 +574,6 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
ParamType.INPUT);
|
||||
}
|
||||
|
||||
private Class<?> findInputType(String name) {
|
||||
return findInputType(reverse.get(name));
|
||||
}
|
||||
|
||||
private Class<?> findOutputType(Object function) {
|
||||
String name = registrations.get(function);
|
||||
if (name == null || !registry.containsBeanDefinition(name)) {
|
||||
@@ -641,10 +584,6 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
ParamType.OUTPUT);
|
||||
}
|
||||
|
||||
private Class<?> findOutputType(String name) {
|
||||
return findOutputType(reverse.get(name));
|
||||
}
|
||||
|
||||
static enum ParamType {
|
||||
INPUT, OUTPUT, INPUT_WRAPPER, OUTPUT_WRAPPER, INPUT_INNER_WRAPPER, OUTPUT_INNER_WRAPPER;
|
||||
|
||||
|
||||
@@ -28,19 +28,7 @@ import reactor.core.publisher.Mono;
|
||||
*/
|
||||
public interface FunctionInspector {
|
||||
|
||||
boolean isMessage(String name);
|
||||
|
||||
@Deprecated
|
||||
Class<?> getInputType(String name);
|
||||
|
||||
@Deprecated
|
||||
Class<?> getOutputType(String name);
|
||||
|
||||
@Deprecated
|
||||
Class<?> getInputWrapper(String name);
|
||||
|
||||
@Deprecated
|
||||
Class<?> getOutputWrapper(String name);
|
||||
boolean isMessage(Object function);
|
||||
|
||||
Class<?> getInputType(Object function);
|
||||
|
||||
@@ -50,9 +38,6 @@ public interface FunctionInspector {
|
||||
|
||||
Class<?> getOutputWrapper(Object function);
|
||||
|
||||
@Deprecated
|
||||
Object convert(String name, String value);
|
||||
|
||||
Object convert(Object function, String value);
|
||||
|
||||
String getName(Object function);
|
||||
|
||||
@@ -27,7 +27,6 @@ import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
@@ -81,14 +80,15 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore("see https://github.com/spring-cloud/spring-cloud-function/issues/81")
|
||||
public void ambiguousFunction() {
|
||||
create(AmbiguousConfiguration.class);
|
||||
assertThat(context.getBean("foos")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("foos")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupConsumer("foos")).isInstanceOf(Consumer.class);
|
||||
// Could be String or Foo
|
||||
assertThat(inspector.getInputType("foos")).isEqualTo(Foo.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("foos")))
|
||||
.isEqualTo(String.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupConsumer("foos")))
|
||||
.isEqualTo(Foo.class);
|
||||
|
||||
}
|
||||
|
||||
@@ -97,8 +97,10 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(GenericConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -106,9 +108,11 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(FluxMessageConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.isMessage("function")).isTrue();
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(String.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(Flux.class);
|
||||
assertThat(inspector.isMessage(catalog.lookupFunction("function"))).isTrue();
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(String.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Flux.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -116,9 +120,11 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(MessageConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.isMessage("function")).isTrue();
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(String.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(String.class);
|
||||
assertThat(inspector.isMessage(catalog.lookupFunction("function"))).isTrue();
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(String.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(String.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -126,8 +132,10 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(GenericFluxConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(Flux.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Flux.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -135,8 +143,10 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(ExternalConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -144,8 +154,10 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(ComponentScanBeanConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -153,8 +165,10 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create(ComponentScanConfiguration.class);
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper("function")).isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("function")))
|
||||
.isAssignableFrom(Map.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -163,8 +177,9 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
create("greeter.jar", ComponentScanJarConfiguration.class);
|
||||
assertThat(context.getBean("greeter")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("greeter")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("greeter")).isAssignableFrom(String.class);
|
||||
assertThat(inspector.getInputWrapper("greeter"))
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("greeter")))
|
||||
.isAssignableFrom(String.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("greeter")))
|
||||
.isAssignableFrom(String.class);
|
||||
}
|
||||
finally {
|
||||
@@ -207,7 +222,8 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
assertThat(context.getBean("function")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("function")).isNull();
|
||||
assertThat(catalog.lookupFunction("other")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputType("other")).isEqualTo(String.class);
|
||||
assertThat(inspector.getInputType(catalog.lookupFunction("other")))
|
||||
.isEqualTo(String.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -235,7 +251,8 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
"spring.cloud.function.compile.foos.outputType=String");
|
||||
assertThat(context.getBean("foos")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("foos")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputWrapper("foos")).isEqualTo(String.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("foos")))
|
||||
.isEqualTo(String.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -249,7 +266,8 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
"spring.cloud.function.import.foos.location=file:./target/foos.fun");
|
||||
assertThat(context.getBean("foos")).isInstanceOf(Function.class);
|
||||
assertThat(catalog.lookupFunction("foos")).isInstanceOf(Function.class);
|
||||
assertThat(inspector.getInputWrapper("foos")).isEqualTo(String.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupFunction("foos")))
|
||||
.isEqualTo(String.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -260,7 +278,8 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
"spring.cloud.function.compile.foos.type=consumer",
|
||||
"spring.cloud.function.compile.foos.inputType=String");
|
||||
assertThat(catalog.lookupConsumer("foos")).isInstanceOf(Consumer.class);
|
||||
assertThat(inspector.getInputWrapper("foos")).isEqualTo(String.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupConsumer("foos")))
|
||||
.isEqualTo(String.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
Consumer<String> consumer = (Consumer<String>) context.getBean("foos");
|
||||
consumer.accept("hello");
|
||||
@@ -274,7 +293,8 @@ public class ContextFunctionCatalogAutoConfigurationTests {
|
||||
+ getClass().getName() + "::set)",
|
||||
"spring.cloud.function.compile.foos.type=consumer");
|
||||
assertThat(catalog.lookupConsumer("foos")).isInstanceOf(Consumer.class);
|
||||
assertThat(inspector.getInputWrapper("foos")).isEqualTo(Flux.class);
|
||||
assertThat(inspector.getInputWrapper(catalog.lookupConsumer("foos")))
|
||||
.isEqualTo(Flux.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
Consumer<Flux<String>> consumer = (Consumer<Flux<String>>) context
|
||||
.getBean("foos");
|
||||
|
||||
Reference in New Issue
Block a user