Program: 10654
Project: 10654
Buggy source:
/** 
 * Flatten param to be sent to remote server. The rules to flatten objects are: <ul> <li>If param is primitive (String, Boolean, Float or Integer) is not modified</li> <li>If param is enum value, is transformed to its String representation</li> <li>If param is an RemoteObject, is sent is reference String</li> <li>If param is a complex object, a Props object is created for it. The Props object has an entry for each property with its name and value. The value of the property is also flatten. Endpoint </li> </ul>
 * @param param the param
 * @return the flattened param
 */
@SuppressWarnings("String_Node_Str") private Object flattenParam(Object param,boolean inTx){
  if (param == null) {
    return null;
  }
  Object processedParam;
  if (param instanceof RemoteObject) {
    processedParam=flattenRemoteObject((RemoteObject)param,inTx);
  }
 else   if (param instanceof Proxy) {
    InvocationHandler handler=Proxy.getInvocationHandler(param);
    if (handler instanceof RemoteObjectInvocationHandler) {
      RemoteObjectInvocationHandler roHandler=(RemoteObjectInvocationHandler)handler;
      processedParam=flattenRemoteObject(roHandler.getRemoteObject(),inTx);
    }
 else {
      throw new ProtocolException("String_Node_Str" + handler);
    }
  }
 else   if (param instanceof Enum<?>) {
    processedParam=param.toString();
  }
 else   if (isPrimitive(param)) {
    processedParam=param;
  }
 else   if (param instanceof List<?>) {
    processedParam=flattenParamsList((List<?>)param,inTx);
  }
 else   if (param instanceof Map<?,?>) {
    processedParam=flattenParamsMap((Map<String,?>)param,inTx);
  }
 else   if (param instanceof Props) {
    processedParam=flattenParams((Props)param,inTx);
  }
 else {
    processedParam=extractParamAsProps(param,inTx);
  }
  return processedParam;
}

Fixed version (ground truth):
/** 
 * Flatten param to be sent to remote server. The rules to flatten objects are: <ul> <li>If param is primitive (String, Boolean, Float or Integer) is not modified</li> <li>If param is enum value, is transformed to its String representation</li> <li>If param is an RemoteObject, is sent is reference String</li> <li>If param is a complex object, a Props object is created for it. The Props object has an entry for each property with its name and value. The value of the property is also flatten. Endpoint</li> </ul>
 * @param param the param
 * @return the flattened param
 */
@SuppressWarnings("String_Node_Str") private Object flattenParam(Object param,boolean inTx){
  if (param == null) {
    return null;
  }
  Object processedParam;
  if (param instanceof RemoteObject) {
    processedParam=flattenRemoteObject((RemoteObject)param,inTx);
  }
 else   if (param instanceof Proxy) {
    InvocationHandler handler=Proxy.getInvocationHandler(param);
    if (handler instanceof RemoteObjectInvocationHandler) {
      RemoteObjectInvocationHandler roHandler=(RemoteObjectInvocationHandler)handler;
      processedParam=flattenRemoteObject(roHandler.getRemoteObject(),inTx);
    }
 else {
      throw new ProtocolException("String_Node_Str" + handler);
    }
  }
 else   if (param instanceof Enum<?>) {
    processedParam=param.toString();
  }
 else   if (isPrimitive(param)) {
    processedParam=param;
  }
 else   if (param instanceof List<?>) {
    processedParam=flattenParamsList((List<?>)param,inTx);
  }
 else   if (param instanceof Map<?,?>) {
    processedParam=flattenParamsMap((Map<String,?>)param,inTx);
  }
 else   if (param instanceof Props) {
    processedParam=flattenParams((Props)param,inTx);
  }
 else {
    processedParam=extractParamAsProps(param,inTx);
  }
  return processedParam;
}