@Override
public FEELFnResult<Object> invoke(EvaluationContext ctx, Object[] params ) {
if( params.length != parameters.size() ) {
return FEELFnResult.ofError(new InvalidInputEvent(Severity.ERROR, "Illegal invocation of function", getName(), getName() + "( " + Arrays.asList(params)+" )", getSignature()));
}
FEELEvent capturedException = null;
try {
ctx.enterFrame();
for ( int i = 0; i < parameters.size(); i++ ) {
ctx.setValue( parameters.get( i ), params[i] );
}
Object result = this.body.apply(ctx);
return FEELFnResult.ofResult( result );
} catch( Exception e ) {
capturedException = new FEELEventBase(Severity.ERROR, "Error invoking function", new RuntimeException("Error invoking function " + getSignature() + ".", e));
} finally {
ctx.exitFrame();
}
return FEELFnResult.ofError( capturedException );
}