Program: 54859
Project: 54859
Buggy source:
HttpResponse(HttpRequest request,LowLevelHttpResponse response){
  this.request=request;
  transport=request.transport;
  headers=request.headers;
  this.response=response;
  contentLength=response.getContentLength();
  contentType=response.getContentType();
  contentEncoding=response.getContentEncoding();
  int code=response.getStatusCode();
  statusCode=code;
  isSuccessStatusCode=isSuccessStatusCode(code);
  String message=response.getReasonPhrase();
  statusMessage=message;
  Logger logger=HttpTransport.LOGGER;
  boolean loggable=logger.isLoggable(Level.CONFIG);
  StringBuilder logbuf=null;
  if (loggable) {
    logbuf=new StringBuilder();
    logbuf.append("String_Node_Str").append(Strings.LINE_SEPARATOR);
    String statusLine=response.getStatusLine();
    if (statusLine != null) {
      logbuf.append(statusLine);
    }
 else {
      logbuf.append(code);
      if (message != null) {
        logbuf.append(' ').append(message);
      }
    }
    logbuf.append(Strings.LINE_SEPARATOR);
  }
  int size=response.getHeaderCount();
  Class<? extends HttpHeaders> headersClass=headers.getClass();
  List<Type> context=Arrays.<Type>asList(headersClass);
  ClassInfo classInfo=ClassInfo.of(headersClass);
  HashMap<String,String> fieldNameMap=HttpHeaders.getFieldNameMap(headersClass);
  ArrayValueMap arrayValueMap=new ArrayValueMap(headers);
  for (int i=0; i < size; i++) {
    String headerName=response.getHeaderName(i);
    String headerValue=response.getHeaderValue(i);
    if (loggable) {
      logbuf.append(headerName + "String_Node_Str" + headerValue).append(Strings.LINE_SEPARATOR);
    }
    String fieldName=fieldNameMap.get(headerName);
    if (fieldName == null) {
      fieldName=headerName;
    }
    FieldInfo fieldInfo=classInfo.getFieldInfo(fieldName);
    if (fieldInfo != null) {
      Type type=Data.resolveWildcardTypeOrTypeVariable(context,fieldInfo.getGenericType());
      if (Types.isArray(type)) {
        Class<?> rawArrayComponentType=Types.getRawArrayComponentType(context,Types.getArrayComponentType(type));
        arrayValueMap.put(fieldInfo.getField(),rawArrayComponentType,parseValue(rawArrayComponentType,context,headerValue));
      }
 else       if (Types.isAssignableToOrFrom(Types.getRawArrayComponentType(context,type),Iterable.class)) {
        @SuppressWarnings("String_Node_Str") Collection<Object> collection=(Collection<Object>)fieldInfo.getValue(headers);
        if (collection == null) {
          collection=Data.newCollectionInstance(type);
          fieldInfo.setValue(headers,collection);
        }
        Type subFieldType=type == Object.class ? null : Types.getIterableParameter(type);
        collection.add(parseValue(subFieldType,context,headerValue));
      }
 else {
        fieldInfo.setValue(headers,parseValue(type,context,headerValue));
      }
    }
 else {
      @SuppressWarnings("String_Node_Str") ArrayList<String> listValue=(ArrayList<String>)headers.get(fieldName);
      if (listValue == null) {
        listValue=new ArrayList<String>();
        headers.set(fieldName,listValue);
      }
      listValue.add(headerValue);
    }
  }
  arrayValueMap.setValues();
  if (loggable) {
    logger.config(logbuf.toString());
  }
}

Fixed version (ground truth):
HttpResponse(HttpRequest request,LowLevelHttpResponse response){
  this.request=request;
  transport=request.transport;
  headers=request.responseHeaders;
  this.response=response;
  contentLength=response.getContentLength();
  contentType=response.getContentType();
  contentEncoding=response.getContentEncoding();
  int code=response.getStatusCode();
  statusCode=code;
  isSuccessStatusCode=isSuccessStatusCode(code);
  String message=response.getReasonPhrase();
  statusMessage=message;
  Logger logger=HttpTransport.LOGGER;
  boolean loggable=logger.isLoggable(Level.CONFIG);
  StringBuilder logbuf=null;
  if (loggable) {
    logbuf=new StringBuilder();
    logbuf.append("String_Node_Str").append(Strings.LINE_SEPARATOR);
    String statusLine=response.getStatusLine();
    if (statusLine != null) {
      logbuf.append(statusLine);
    }
 else {
      logbuf.append(code);
      if (message != null) {
        logbuf.append(' ').append(message);
      }
    }
    logbuf.append(Strings.LINE_SEPARATOR);
  }
  int size=response.getHeaderCount();
  Class<? extends HttpHeaders> headersClass=headers.getClass();
  List<Type> context=Arrays.<Type>asList(headersClass);
  ClassInfo classInfo=ClassInfo.of(headersClass);
  HashMap<String,String> fieldNameMap=HttpHeaders.getFieldNameMap(headersClass);
  ArrayValueMap arrayValueMap=new ArrayValueMap(headers);
  for (int i=0; i < size; i++) {
    String headerName=response.getHeaderName(i);
    String headerValue=response.getHeaderValue(i);
    if (loggable) {
      logbuf.append(headerName + "String_Node_Str" + headerValue).append(Strings.LINE_SEPARATOR);
    }
    String fieldName=fieldNameMap.get(headerName);
    if (fieldName == null) {
      fieldName=headerName;
    }
    FieldInfo fieldInfo=classInfo.getFieldInfo(fieldName);
    if (fieldInfo != null) {
      Type type=Data.resolveWildcardTypeOrTypeVariable(context,fieldInfo.getGenericType());
      if (Types.isArray(type)) {
        Class<?> rawArrayComponentType=Types.getRawArrayComponentType(context,Types.getArrayComponentType(type));
        arrayValueMap.put(fieldInfo.getField(),rawArrayComponentType,parseValue(rawArrayComponentType,context,headerValue));
      }
 else       if (Types.isAssignableToOrFrom(Types.getRawArrayComponentType(context,type),Iterable.class)) {
        @SuppressWarnings("String_Node_Str") Collection<Object> collection=(Collection<Object>)fieldInfo.getValue(headers);
        if (collection == null) {
          collection=Data.newCollectionInstance(type);
          fieldInfo.setValue(headers,collection);
        }
        Type subFieldType=type == Object.class ? null : Types.getIterableParameter(type);
        collection.add(parseValue(subFieldType,context,headerValue));
      }
 else {
        fieldInfo.setValue(headers,parseValue(type,context,headerValue));
      }
    }
 else {
      @SuppressWarnings("String_Node_Str") ArrayList<String> listValue=(ArrayList<String>)headers.get(fieldName);
      if (listValue == null) {
        listValue=new ArrayList<String>();
        headers.set(fieldName,listValue);
      }
      listValue.add(headerValue);
    }
  }
  arrayValueMap.setValues();
  if (loggable) {
    logger.config(logbuf.toString());
  }
}