Program: 66196
Project: 66196
Buggy source:
/** 
 * XmlAttribute override will completely replace the existing values.
 * @param xmlAttribute
 * @param oldProperty
 * @param nsInfo
 * @return
 */
private Property processXmlAttribute(XmlAttribute xmlAttribute,Property oldProperty,TypeInfo typeInfo,NamespaceInfo nsInfo){
  resetProperty(oldProperty,typeInfo);
  if (xmlAttribute.isXmlId()) {
    oldProperty.setIsXmlId(true);
    typeInfo.setIDProperty(oldProperty);
  }
 else {
    if (typeInfo.getIDProperty() != null && typeInfo.getIDProperty().getPropertyName().equals(oldProperty.getPropertyName())) {
      typeInfo.setIDProperty(null);
    }
  }
  oldProperty.setIsXmlIdRef(xmlAttribute.isXmlIdref());
  if (xmlAttribute.isXmlKey()) {
    typeInfo.addXmlKeyProperty(oldProperty);
  }
  oldProperty.setIsAttribute(true);
  if (xmlAttribute.getXmlJavaTypeAdapter() != null) {
    oldProperty.setXmlJavaTypeAdapter(xmlAttribute.getXmlJavaTypeAdapter());
  }
  if (xmlAttribute.isSetRequired()) {
    oldProperty.setIsRequired(xmlAttribute.isRequired());
  }
 else   if (oldProperty.getActualType().isPrimitive()) {
    oldProperty.setIsRequired(true);
  }
  oldProperty.setisInlineBinaryData(xmlAttribute.isXmlInlineBinaryData());
  String name;
  String namespace;
  if (xmlAttribute.getXmlPath() != null) {
    oldProperty.setXmlPath(xmlAttribute.getXmlPath());
    name=getNameFromXPath(xmlAttribute.getXmlPath(),oldProperty.getPropertyName(),true);
    namespace=DEFAULT;
  }
 else {
    name=xmlAttribute.getName();
    namespace=xmlAttribute.getNamespace();
  }
  QName qName;
  if (name.equals(DEFAULT)) {
    name=oldProperty.getPropertyName();
  }
  if (namespace.equals(DEFAULT)) {
    if (nsInfo.isElementFormQualified()) {
      qName=new QName(nsInfo.getNamespace(),name);
    }
 else {
      qName=new QName(name);
    }
  }
 else {
    qName=new QName(namespace,name);
  }
  oldProperty.setSchemaName(qName);
  if (!xmlAttribute.getContainerType().equals(DEFAULT)) {
    setContainerType(oldProperty,xmlAttribute.getContainerType());
  }
  if (!xmlAttribute.getType().equals(DEFAULT)) {
    JavaClass pType=jModelInput.getJavaModel().getClass(xmlAttribute.getType());
    if (aProcessor.isCollectionType(oldProperty.getType())) {
      oldProperty.setGenericType(pType);
    }
 else {
      oldProperty.setType(pType);
    }
    oldProperty.setHasXmlElementType(true);
    if (aProcessor.shouldGenerateTypeInfo(pType) && aProcessor.getTypeInfo().get(pType.getQualifiedName()) == null) {
      aProcessor.buildNewTypeInfo(new JavaClass[]{pType});
    }
  }
  if (xmlAttribute.getXmlMimeType() != null) {
    oldProperty.setMimeType(xmlAttribute.getXmlMimeType());
  }
  if (xmlAttribute.isXmlAttachmentRef()) {
    oldProperty.setIsSwaAttachmentRef(true);
    oldProperty.setSchemaType(XMLConstants.SWA_REF_QNAME);
  }
  if (xmlAttribute.getXmlSchemaType() != null) {
    oldProperty.setSchemaType(new QName(xmlAttribute.getXmlSchemaType().getNamespace(),xmlAttribute.getXmlSchemaType().getName()));
  }
  if (xmlAttribute.getXmlAccessMethods() != null) {
    oldProperty.setMethodProperty(true);
    oldProperty.setGetMethodName(xmlAttribute.getXmlAccessMethods().getGetMethod());
    oldProperty.setSetMethodName(xmlAttribute.getXmlAccessMethods().getSetMethod());
  }
  if (xmlAttribute.isSetReadOnly()) {
    oldProperty.setReadOnly(xmlAttribute.isReadOnly());
  }
  if (xmlAttribute.isSetWriteOnly()) {
    oldProperty.setWriteOnly(xmlAttribute.isWriteOnly());
  }
  if (xmlAttribute.getXmlAbstractNullPolicy() != null) {
    JAXBElement jaxbElt=xmlAttribute.getXmlAbstractNullPolicy();
    oldProperty.setNullPolicy((XmlAbstractNullPolicy)jaxbElt.getValue());
  }
  if (xmlAttribute.getXmlProperties() != null && xmlAttribute.getXmlProperties().getXmlProperty().size() > 0) {
    oldProperty.setUserProperties(createUserPropertyMap(xmlAttribute.getXmlProperties().getXmlProperty()));
  }
  return oldProperty;
}

Fixed version (ground truth):
/** 
 * XmlAttribute override will completely replace the existing values.
 * @param xmlAttribute
 * @param oldProperty
 * @param nsInfo
 * @return
 */
private Property processXmlAttribute(XmlAttribute xmlAttribute,Property oldProperty,TypeInfo typeInfo,NamespaceInfo nsInfo){
  resetProperty(oldProperty,typeInfo);
  if (xmlAttribute.isXmlId()) {
    oldProperty.setIsXmlId(true);
    typeInfo.setIDProperty(oldProperty);
  }
 else {
    if (typeInfo.getIDProperty() != null && typeInfo.getIDProperty().getPropertyName().equals(oldProperty.getPropertyName())) {
      typeInfo.setIDProperty(null);
    }
  }
  oldProperty.setIsXmlIdRef(xmlAttribute.isXmlIdref());
  if (xmlAttribute.isXmlKey()) {
    typeInfo.addXmlKeyProperty(oldProperty);
  }
  oldProperty.setIsAttribute(true);
  oldProperty.setisInlineBinaryData(xmlAttribute.isXmlInlineBinaryData());
  String name;
  String namespace;
  if (xmlAttribute.getXmlPath() != null) {
    oldProperty.setXmlPath(xmlAttribute.getXmlPath());
    name=getNameFromXPath(xmlAttribute.getXmlPath(),oldProperty.getPropertyName(),true);
    namespace=DEFAULT;
  }
 else {
    name=xmlAttribute.getName();
    namespace=xmlAttribute.getNamespace();
  }
  QName qName;
  if (name.equals(DEFAULT)) {
    name=oldProperty.getPropertyName();
  }
  if (namespace.equals(DEFAULT)) {
    if (nsInfo.isElementFormQualified()) {
      qName=new QName(nsInfo.getNamespace(),name);
    }
 else {
      qName=new QName(name);
    }
  }
 else {
    qName=new QName(namespace,name);
  }
  oldProperty.setSchemaName(qName);
  if (!xmlAttribute.getContainerType().equals(DEFAULT)) {
    setContainerType(oldProperty,xmlAttribute.getContainerType());
  }
  if (!xmlAttribute.getType().equals(DEFAULT)) {
    JavaClass pType=jModelInput.getJavaModel().getClass(xmlAttribute.getType());
    if (aProcessor.isCollectionType(oldProperty.getType())) {
      oldProperty.setGenericType(pType);
    }
 else {
      oldProperty.setType(pType);
    }
    oldProperty.setHasXmlElementType(true);
    if (aProcessor.shouldGenerateTypeInfo(pType) && aProcessor.getTypeInfo().get(pType.getQualifiedName()) == null) {
      aProcessor.buildNewTypeInfo(new JavaClass[]{pType});
    }
  }
  reapplyPackageAndClassAdapters(oldProperty,typeInfo);
  if (xmlAttribute.getXmlJavaTypeAdapter() != null) {
    oldProperty.setXmlJavaTypeAdapter(xmlAttribute.getXmlJavaTypeAdapter());
  }
  if (xmlAttribute.isSetRequired()) {
    oldProperty.setIsRequired(xmlAttribute.isRequired());
  }
 else   if (oldProperty.getActualType().isPrimitive()) {
    oldProperty.setIsRequired(true);
  }
  if (xmlAttribute.getXmlMimeType() != null) {
    oldProperty.setMimeType(xmlAttribute.getXmlMimeType());
  }
  if (xmlAttribute.isXmlAttachmentRef()) {
    oldProperty.setIsSwaAttachmentRef(true);
    oldProperty.setSchemaType(XMLConstants.SWA_REF_QNAME);
  }
  if (xmlAttribute.getXmlSchemaType() != null) {
    oldProperty.setSchemaType(new QName(xmlAttribute.getXmlSchemaType().getNamespace(),xmlAttribute.getXmlSchemaType().getName()));
  }
  if (xmlAttribute.getXmlAccessMethods() != null) {
    oldProperty.setMethodProperty(true);
    oldProperty.setGetMethodName(xmlAttribute.getXmlAccessMethods().getGetMethod());
    oldProperty.setSetMethodName(xmlAttribute.getXmlAccessMethods().getSetMethod());
  }
  if (xmlAttribute.isSetReadOnly()) {
    oldProperty.setReadOnly(xmlAttribute.isReadOnly());
  }
  if (xmlAttribute.isSetWriteOnly()) {
    oldProperty.setWriteOnly(xmlAttribute.isWriteOnly());
  }
  if (xmlAttribute.getXmlAbstractNullPolicy() != null) {
    JAXBElement jaxbElt=xmlAttribute.getXmlAbstractNullPolicy();
    oldProperty.setNullPolicy((XmlAbstractNullPolicy)jaxbElt.getValue());
  }
  if (xmlAttribute.getXmlProperties() != null && xmlAttribute.getXmlProperties().getXmlProperty().size() > 0) {
    oldProperty.setUserProperties(createUserPropertyMap(xmlAttribute.getXmlProperties().getXmlProperty()));
  }
  return oldProperty;
}