Program: 3908
Project: 3908
Buggy source:
private Response<Object> invokeByAddressWithComplexBinding(MethodCall<Object> methodCall){
  String mAddress=methodCall.address();
  final String[] split=StringScanner.split(mAddress,'/');
  for (  String root : addresses) {
    if (mAddress.startsWith(root)) {
      mAddress=root;
      break;
    }
  }
  Pair<MethodBinding,MethodAccess> binding=methodMap.get(mAddress);
  final MethodBinding methodBinding=binding.getFirst();
  final MethodAccess methodAccess=binding.getSecond();
  final List<ArgParamBinding> parameters=methodBinding.parameters();
  final Class<?>[] parameterTypes=methodAccess.parameterTypes();
  final List<TypeType> paramEnumTypes=methodAccess.paramTypeEnumList();
  final List<Object> args=new ArrayList<>(parameterTypes.length);
  for (int index=0; index < parameterTypes.length; index++) {
    args.add(null);
  }
  final List<List<AnnotationData>> annotationDataForParams=methodAccess.annotationDataForParams();
  for (  ArgParamBinding param : parameters) {
    final int uriPosition=param.getUriPosition();
    final int methodParamPosition=param.getMethodParamPosition();
    final String paramName=param.getMethodParamName();
    if (uriPosition != -1) {
      if (uriPosition > split.length) {
        die("String_Node_Str",methodAccess);
      }
 else {
        String paramAtPos=split[uriPosition];
        paramAtPos=Str.slc(paramAtPos,1,-1);
        Object arg=Conversions.coerce(paramEnumTypes.get(methodParamPosition),parameterTypes[methodParamPosition],paramAtPos);
        args.set(methodParamPosition,arg);
      }
    }
 else {
      if (Str.isEmpty(paramName)) {
        die("String_Node_Str");
      }
      for (int index=0; index < parameterTypes.length; index++) {
        final List<AnnotationData> paramsAnnotationData=annotationDataForParams.get(index);
        String name="String_Node_Str";
        for (        AnnotationData paramAnnotation : paramsAnnotationData) {
          if (paramAnnotation.getName().equals("String_Node_Str")) {
            name=(String)paramAnnotation.getValues().get("String_Node_Str");
            if (!Str.isEmpty(name)) {
              break;
            }
          }
        }
        if (paramName.equals(name)) {
          Object arg=Conversions.coerce(paramEnumTypes.get(index),parameterTypes[index],split[index]);
          args.set(index,arg);
        }
      }
    }
  }
  if (methodAccess.returnType() == Void.class) {
    methodAccess.invokeDynamicObject(service,args);
    return ServiceConstants.VOID;
  }
 else {
    Object returnValue=methodAccess.invokeDynamicObject(service,args);
    Response<Object> response=ResponseImpl.response(methodCall.id(),methodCall.timestamp(),methodCall.address(),methodCall.returnAddress(),returnValue);
    return response;
  }
}

Fixed version (ground truth):
private Response<Object> invokeByAddressWithComplexBinding(MethodCall<Object> methodCall){
  String mAddress=methodCall.address();
  final String[] split=StringScanner.split(mAddress,'/');
  for (  String root : addresses) {
    if (mAddress.startsWith(root)) {
      mAddress=root;
      break;
    }
  }
  Pair<MethodBinding,MethodAccess> binding=methodMap.get(mAddress);
  final MethodBinding methodBinding=binding.getFirst();
  final MethodAccess methodAccess=binding.getSecond();
  final List<ArgParamBinding> parameters=methodBinding.parameters();
  final Class<?>[] parameterTypes=methodAccess.parameterTypes();
  final List<TypeType> paramEnumTypes=methodAccess.paramTypeEnumList();
  final List<Object> args=new ArrayList<>(parameterTypes.length);
  for (int index=0; index < parameterTypes.length; index++) {
    args.add(null);
  }
  final List<List<AnnotationData>> annotationDataForParams=methodAccess.annotationDataForParams();
  for (  ArgParamBinding param : parameters) {
    final int uriPosition=param.getUriPosition();
    final int methodParamPosition=param.getMethodParamPosition();
    final String paramName=param.getMethodParamName();
    if (uriPosition != -1) {
      if (uriPosition > split.length) {
        die("String_Node_Str",methodAccess);
      }
 else {
        String paramAtPos=split[uriPosition];
        Object arg=Conversions.coerce(paramEnumTypes.get(methodParamPosition),parameterTypes[methodParamPosition],paramAtPos);
        args.set(methodParamPosition,arg);
      }
    }
 else {
      if (Str.isEmpty(paramName)) {
        die("String_Node_Str");
      }
      for (int index=0; index < parameterTypes.length; index++) {
        final List<AnnotationData> paramsAnnotationData=annotationDataForParams.get(index);
        String name="String_Node_Str";
        for (        AnnotationData paramAnnotation : paramsAnnotationData) {
          if (paramAnnotation.getName().equals("String_Node_Str")) {
            name=(String)paramAnnotation.getValues().get("String_Node_Str");
            if (!Str.isEmpty(name)) {
              break;
            }
          }
        }
        if (paramName.equals(name)) {
          Object arg=Conversions.coerce(paramEnumTypes.get(index),parameterTypes[index],split[index]);
          args.set(index,arg);
        }
      }
    }
  }
  if (methodAccess.returnType() == Void.class) {
    methodAccess.invokeDynamicObject(service,args);
    return ServiceConstants.VOID;
  }
 else {
    Object returnValue=methodAccess.invokeDynamicObject(service,args);
    Response<Object> response=ResponseImpl.response(methodCall.id(),methodCall.timestamp(),methodCall.address(),methodCall.returnAddress(),returnValue);
    return response;
  }
}