private static MethodSpec buildMethodForFunction(FunctionSignature signature) {
final MethodSpec.Builder builder = MethodSpec.methodBuilder(signature.methodName)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.addJavadoc("Call $S function with given parameters", signature.getFunctionName())
.returns(signature.returnTypeForFunctionParam())
<BUG>.addStatement("final $T params = new $T<>()", LIST, ARRAY_LIST);
</BUG>
signature.parameterSignatures.forEach(param -> {
final String paramName = param.name;
builder.addParameter(param.typeForFunctionParam(), paramName, Modifier.FINAL)

private static MethodSpec buildMethodForFunction(FunctionSignature signature) {
final MethodSpec.Builder builder = MethodSpec.methodBuilder(signature.methodName)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.addJavadoc("Call $S function with given parameters", signature.getFunctionName())
.returns(signature.returnTypeForFunctionParam())
.addStatement("final $T<Object> params = new $T<>()", LIST, ARRAY_LIST);
signature.parameterSignatures.forEach(param -> {
final String paramName = param.name;
builder.addParameter(param.typeForFunctionParam(), paramName, Modifier.FINAL)
