Program: 17854
Project: 17854
Buggy source:
@SuppressWarnings("String_Node_Str") private Object readComplexProperty(final JsonReader reader,final EntityComplexPropertyInfo complexPropertyInfo,final Object typeMapping) throws EdmException, EntityProviderException, IOException {
  reader.beginObject();
  Map<String,Object> data=new HashMap<String,Object>();
  Map<String,Object> mapping;
  if (typeMapping != null) {
    if (typeMapping instanceof Map) {
      mapping=(Map<String,Object>)typeMapping;
    }
 else {
      throw new EntityProviderException(EntityProviderException.INVALID_MAPPING.addContent(complexPropertyInfo.getName()));
    }
  }
 else {
    mapping=new HashMap<String,Object>();
  }
  while (reader.hasNext()) {
    String childName=reader.nextName();
    if (FormatJson.METADATA.equals(childName)) {
      reader.beginObject();
      childName=reader.nextName();
      if (!FormatJson.TYPE.equals(childName)) {
        throw new EntityProviderException(EntityProviderException.MISSING_ATTRIBUTE.addContent(FormatJson.TYPE).addContent(FormatJson.METADATA));
      }
      reader.nextString();
      reader.endObject();
    }
 else {
      EntityPropertyInfo childPropertyInfo=complexPropertyInfo.getPropertyInfo(childName);
      Object childData=readPropertyValue(reader,childPropertyInfo,mapping.get(childName));
      if (data.containsKey(childName)) {
        throw new EntityProviderException(EntityProviderException.DOUBLE_PROPERTY.addContent(childName));
      }
      data.put(childName,childData);
    }
  }
  reader.endObject();
  return data;
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") private Object readComplexProperty(final JsonReader reader,final EntityComplexPropertyInfo complexPropertyInfo,final Object typeMapping) throws EdmException, EntityProviderException, IOException {
  if (reader.peek().equals(JsonToken.NULL)) {
    reader.nextNull();
    return null;
  }
  reader.beginObject();
  Map<String,Object> data=new HashMap<String,Object>();
  Map<String,Object> mapping;
  if (typeMapping != null) {
    if (typeMapping instanceof Map) {
      mapping=(Map<String,Object>)typeMapping;
    }
 else {
      throw new EntityProviderException(EntityProviderException.INVALID_MAPPING.addContent(complexPropertyInfo.getName()));
    }
  }
 else {
    mapping=new HashMap<String,Object>();
  }
  while (reader.hasNext()) {
    String childName=reader.nextName();
    if (FormatJson.METADATA.equals(childName)) {
      reader.beginObject();
      childName=reader.nextName();
      if (!FormatJson.TYPE.equals(childName)) {
        throw new EntityProviderException(EntityProviderException.MISSING_ATTRIBUTE.addContent(FormatJson.TYPE).addContent(FormatJson.METADATA));
      }
      String actualTypeName=reader.nextString();
      String expectedTypeName=complexPropertyInfo.getType().getNamespace() + Edm.DELIMITER + complexPropertyInfo.getType().getName();
      if (!expectedTypeName.equals(actualTypeName)) {
        throw new EntityProviderException(EntityProviderException.INVALID_ENTITYTYPE.addContent(expectedTypeName).addContent(actualTypeName));
      }
      reader.endObject();
    }
 else {
      EntityPropertyInfo childPropertyInfo=complexPropertyInfo.getPropertyInfo(childName);
      if (childPropertyInfo == null) {
        throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT.addContent(childName));
      }
      Object childData=readPropertyValue(reader,childPropertyInfo,mapping.get(childName));
      if (data.containsKey(childName)) {
        throw new EntityProviderException(EntityProviderException.DOUBLE_PROPERTY.addContent(childName));
      }
      data.put(childName,childData);
    }
  }
  reader.endObject();
  return data;
}