use of org.mule.runtime.module.extension.api.loader.java.type.FunctionElement in project mule by mulesoft.
the class FunctionModelLoaderDelegate method declareFunctions.
void declareFunctions(ExtensionDeclarer extensionDeclarer, HasFunctionDeclarer declarer, FunctionContainerElement methodOwnerClass, List<FunctionElement> functions) {
for (FunctionElement function : functions) {
FunctionContainerElement functionOwner = methodOwnerClass != null ? methodOwnerClass : function.getEnclosingType();
checkIsNotAnExtension(functionOwner);
final Optional<ExtensionParameter> configParameter = loader.getConfigParameter(function);
if (configParameter.isPresent()) {
throw new IllegalModelDefinitionException(format("Function '%s' requires a config parameter, but that is not allowed. " + "Remove such parameter.", function.getName()));
}
HasFunctionDeclarer actualDeclarer = (HasFunctionDeclarer) loader.selectDeclarerBasedOnConfig(extensionDeclarer, (Declarer) declarer, configParameter, empty());
if (functionDeclarers.containsKey(function)) {
actualDeclarer.withFunction(functionDeclarers.get(function));
continue;
}
final FunctionDeclarer functionDeclarer = actualDeclarer.withFunction(function.getAlias());
function.getMethod().ifPresent(method -> {
functionDeclarer.withModelProperty(new ImplementingMethodModelProperty(method));
function.getDeclaringClass().ifPresent(clazz -> functionDeclarer.withModelProperty(new FunctionExecutorModelProperty(new ReflectiveFunctionExecutorFactory<>(clazz, method))));
});
functionDeclarer.withOutput().ofType(function.getReturnMetadataType());
ParameterDeclarationContext declarationContext = new ParameterDeclarationContext(FUNCTION, functionDeclarer.getDeclaration());
loader.getMethodParametersLoader().declare(functionDeclarer, function.getParameters(), declarationContext);
functionDeclarers.put(function, functionDeclarer);
}
}
Aggregations