Program: 10783
Project: 10783
Buggy source:
@SuppressWarnings({"String_Node_Str","String_Node_Str"}) private <R,P>Response<R> localSendRequest(Request<P> request,Class<R> resultClass){
  String jsonRequest=request.toString();
  log.debug("String_Node_Str",jsonRequest);
  Request<JsonObject> newRequest=JsonUtils.fromJsonRequest(jsonRequest,JsonObject.class);
  final Response<JsonObject>[] response=new Response[1];
  ClientSession clientSession=new ClientSession("String_Node_Str",null,new JsonRpcRequestSenderHelper(){
    @Override protected void internalSendRequest(    Request<? extends Object> request,    Class<JsonElement> clazz,    final Continuation<Response<JsonElement>> continuation){
      try {
        handlerManager.handleRequest(session,(Request<JsonElement>)request,new ResponseSender(){
          @Override public void sendResponse(          Message message) throws IOException {
            continuation.onSuccess((Response<JsonElement>)message);
          }
        }
);
      }
 catch (      IOException e) {
        continuation.onError(e);
      }
    }
    @Override protected <P2,R2>Response<R2> internalSendRequest(    Request<P2> request,    Class<R2> resultClass) throws IOException {
      final Object[] response=new Object[1];
      try {
        handlerManager.handleRequest(session,(Request<JsonElement>)request,new ResponseSender(){
          @Override public void sendResponse(          Message message) throws IOException {
            response[0]=message;
          }
        }
);
        Response<R2> response2=(Response<R2>)response[0];
        Object result=response2.getResult();
        if (result == null || resultClass.isAssignableFrom(result.getClass())) {
          return response2;
        }
 else         if (resultClass == JsonElement.class) {
          response2.setResult((R2)JsonUtils.toJsonElement(result));
          return response2;
        }
 else {
          throw new ClassCastException("String_Node_Str" + result + "String_Node_Str"+ resultClass);
        }
      }
 catch (      IOException e) {
        return new Response<R2>(request.getId(),ResponseError.newFromException(e));
      }
    }
  }
);
  TransactionImpl t=new TransactionImpl(clientSession,newRequest,new ResponseSender(){
    @Override public void sendResponse(    Message message) throws IOException {
      response[0]=(Response<JsonObject>)message;
    }
  }
);
  try {
    remoteHandler.handleRequest(t,(Request)request);
  }
 catch (  Exception e) {
    ResponseError error=ResponseError.newFromException(e);
    return new Response<>(request.getId(),error);
  }
  if (response[0] != null) {
    Response<R> responseObj=(Response<R>)response[0];
    if (responseObj.getId() == null) {
      responseObj.setId(request.getId());
    }
    String jsonResponse=responseObj.toString();
    Response<R> newResponse=JsonUtils.fromJsonResponse(jsonResponse,resultClass);
    newResponse.setId(request.getId());
    return newResponse;
  }
  return new Response<>(request.getId());
}

Fixed version (ground truth):
@SuppressWarnings({"String_Node_Str","String_Node_Str"}) private <R,P>Response<R> localSendRequest(Request<P> request,Class<R> resultClass){
  String jsonRequest=request.toString();
  log.debug("String_Node_Str",jsonRequest);
  Request<JsonObject> newRequest=JsonUtils.fromJsonRequest(jsonRequest,JsonObject.class);
  final Response<JsonObject>[] response=new Response[1];
  ClientSession clientSession=new ClientSession("String_Node_Str",null,new JsonRpcRequestSenderHelper(){
    @Override protected void internalSendRequest(    Request<? extends Object> request,    Class<JsonElement> clazz,    final Continuation<Response<JsonElement>> continuation){
      try {
        handlerManager.handleRequest(session,(Request<JsonElement>)request,new ResponseSender(){
          @Override public void sendResponse(          Message message) throws IOException {
            continuation.onSuccess((Response<JsonElement>)message);
          }
          @Override public void sendPingResponse(          Message message) throws IOException {
            sendResponse(message);
          }
        }
);
      }
 catch (      IOException e) {
        continuation.onError(e);
      }
    }
    @Override protected <P2,R2>Response<R2> internalSendRequest(    Request<P2> request,    Class<R2> resultClass) throws IOException {
      final Object[] response=new Object[1];
      try {
        handlerManager.handleRequest(session,(Request<JsonElement>)request,new ResponseSender(){
          @Override public void sendResponse(          Message message) throws IOException {
            response[0]=message;
          }
          @Override public void sendPingResponse(          Message message) throws IOException {
            sendResponse(message);
          }
        }
);
        Response<R2> response2=(Response<R2>)response[0];
        Object result=response2.getResult();
        if (result == null || resultClass.isAssignableFrom(result.getClass())) {
          return response2;
        }
 else         if (resultClass == JsonElement.class) {
          response2.setResult((R2)JsonUtils.toJsonElement(result));
          return response2;
        }
 else {
          throw new ClassCastException("String_Node_Str" + result + "String_Node_Str"+ resultClass);
        }
      }
 catch (      IOException e) {
        return new Response<R2>(request.getId(),ResponseError.newFromException(e));
      }
    }
  }
);
  TransactionImpl t=new TransactionImpl(clientSession,newRequest,new ResponseSender(){
    @Override public void sendResponse(    Message message) throws IOException {
      response[0]=(Response<JsonObject>)message;
    }
    @Override public void sendPingResponse(    Message message) throws IOException {
      sendResponse(message);
    }
  }
);
  try {
    remoteHandler.handleRequest(t,(Request)request);
  }
 catch (  Exception e) {
    ResponseError error=ResponseError.newFromException(e);
    return new Response<>(request.getId(),error);
  }
  if (response[0] != null) {
    Response<R> responseObj=(Response<R>)response[0];
    if (responseObj.getId() == null) {
      responseObj.setId(request.getId());
    }
    String jsonResponse=responseObj.toString();
    Response<R> newResponse=JsonUtils.fromJsonResponse(jsonResponse,resultClass);
    newResponse.setId(request.getId());
    return newResponse;
  }
  return new Response<>(request.getId());
}