Program: 33340
Project: 33340
Buggy source:
@Override public EdmFunction createBoundFunction(final FullQualifiedName functionName,final FullQualifiedName bindingParameterTypeName,final Boolean isBindingParameterCollection,final List<String> parameterNames){
  try {
    List<Function> functions=functionsMap.get(functionName);
    if (functions == null) {
      functions=provider.getFunctions(functionName);
      if (functions != null) {
        functionsMap.put(functionName,functions);
      }
 else {
        return null;
      }
    }
    EdmFunctionImpl functionImpl=null;
    for (    Function function : functions) {
      if (function.isBound() == true) {
        List<Parameter> parameters=function.getParameters();
        if (parameters == null || parameters.size() == 0) {
          throw new EdmException("String_Node_Str" + functionName);
        }
        Parameter bindingParameter=parameters.get(0);
        if (bindingParameterTypeName.equals(bindingParameter.getType()) && isBindingParameterCollection.booleanValue() == bindingParameter.isCollection()) {
          if (parameterNames.size() == parameters.size()) {
            List<String> functionParameterNames=new ArrayList<String>();
            for (            Parameter parameter : parameters) {
              functionParameterNames.add(parameter.getName());
            }
            if (parameterNames.containsAll(functionParameterNames)) {
              functionImpl=new EdmFunctionImpl(this,functionName,function);
              break;
            }
          }
        }
      }
    }
    return functionImpl;
  }
 catch (  ODataException e) {
    throw new EdmException(e);
  }
}

Fixed version (ground truth):
@Override public EdmFunction createBoundFunction(final FullQualifiedName functionName,final FullQualifiedName bindingParameterTypeName,final Boolean isBindingParameterCollection,final List<String> parameterNames){
  try {
    List<Function> functions=functionsMap.get(functionName);
    if (functions == null) {
      functions=provider.getFunctions(functionName);
      if (functions != null) {
        functionsMap.put(functionName,functions);
      }
 else {
        return null;
      }
    }
    EdmFunctionImpl functionImpl=null;
    for (    Function function : functions) {
      if (function.isBound() == true) {
        List<Parameter> providerParameters=function.getParameters();
        if (providerParameters == null || providerParameters.size() == 0) {
          throw new EdmException("String_Node_Str" + functionName);
        }
        Parameter bindingParameter=providerParameters.get(0);
        if (bindingParameterTypeName.equals(bindingParameter.getType()) && isBindingParameterCollection.booleanValue() == bindingParameter.isCollection()) {
          if (parameterNames.size() == providerParameters.size() - 1) {
            List<String> providerParameterNames=new ArrayList<String>();
            for (int i=1; i < providerParameters.size(); i++) {
              providerParameterNames.add(providerParameters.get(i).getName());
            }
            if (parameterNames.containsAll(providerParameterNames)) {
              functionImpl=new EdmFunctionImpl(this,functionName,function);
              break;
            }
          }
        }
      }
    }
    return functionImpl;
  }
 catch (  ODataException e) {
    throw new EdmException(e);
  }
}