Program: 64884
Project: 64884
Buggy source:
public boolean addXsiTypeAndClassIndicatorIfRequired(XMLRecord record,XMLDescriptor xmlDescriptor,XMLDescriptor referenceDescriptor,XMLField xmlField,boolean addToNamespaceResolver){
  if (descriptor.hasInheritance() && !xsiTypeIndicatorField) {
    xmlDescriptor.getInheritancePolicy().addClassIndicatorFieldToRow(record);
    return true;
  }
  QName leafType=null;
  if (xmlField != null) {
    leafType=xmlField.getLeafElementType();
    XMLSchemaReference xmlRef=xmlDescriptor.getSchemaReference();
    if (xmlRef != null) {
      if (leafType == null) {
        if (xmlRef.getType() == XMLSchemaReference.ELEMENT) {
          return false;
        }
        if (referenceDescriptor == null) {
          QName typeValueQName=getTypeValueToWriteAsQName(record,xmlDescriptor,xmlRef,addToNamespaceResolver);
          writeXsiTypeAttribute(xmlDescriptor,record,typeValueQName,addToNamespaceResolver);
          return true;
        }
      }
 else       if (((xmlRef.getType() == XMLSchemaReference.COMPLEX_TYPE) || (xmlRef.getType() == XMLSchemaReference.SIMPLE_TYPE)) && xmlRef.getSchemaContext() != null && xmlRef.isGlobalDefinition()) {
        QName ctxQName=xmlRef.getSchemaContextAsQName(xmlDescriptor.getNamespaceResolver());
        if (!ctxQName.equals(leafType)) {
          QName typeValueQName=getTypeValueToWriteAsQName(record,xmlDescriptor,xmlRef,addToNamespaceResolver);
          writeXsiTypeAttribute(xmlDescriptor,record,typeValueQName,addToNamespaceResolver);
          return true;
        }
      }
    }
  }
  if (referenceDescriptor != null && referenceDescriptor == xmlDescriptor) {
    return false;
  }
  if (xmlDescriptor.hasInheritance() && !xmlDescriptor.getInheritancePolicy().isRootParentDescriptor()) {
    InheritancePolicy inheritancePolicy=xmlDescriptor.getInheritancePolicy();
    XMLField indicatorField=(XMLField)inheritancePolicy.getClassIndicatorField();
    if (indicatorField != null && xsiTypeIndicatorField) {
      Object classIndicatorValueObject=inheritancePolicy.getClassIndicatorMapping().get(xmlDescriptor.getJavaClass());
      QName classIndicatorQName=null;
      if (classIndicatorValueObject instanceof QName) {
        classIndicatorQName=(QName)classIndicatorValueObject;
      }
 else {
        String classIndicatorValue=(String)inheritancePolicy.getClassIndicatorMapping().get(xmlDescriptor.getJavaClass());
        int nsindex=classIndicatorValue.indexOf(XMLConstants.COLON);
        String localName=null;
        String prefix=null;
        if (nsindex != -1) {
          localName=classIndicatorValue.substring(nsindex + 1);
          prefix=classIndicatorValue.substring(0,nsindex);
        }
 else {
          localName=classIndicatorValue;
        }
        String namespaceURI=xmlDescriptor.getNonNullNamespaceResolver().resolveNamespacePrefix(prefix);
        classIndicatorQName=new QName(namespaceURI,localName);
      }
      if (leafType == null || !classIndicatorQName.equals(leafType)) {
        if (inheritancePolicy.hasClassExtractor()) {
          inheritancePolicy.addClassIndicatorFieldToRow(record);
        }
 else {
          writeXsiTypeAttribute(xmlDescriptor,record,classIndicatorQName,addToNamespaceResolver);
        }
        return true;
      }
      return false;
    }
  }
  return false;
}

Fixed version (ground truth):
public boolean addXsiTypeAndClassIndicatorIfRequired(XMLRecord record,XMLDescriptor xmlDescriptor,XMLDescriptor referenceDescriptor,XMLField xmlField,boolean addToNamespaceResolver){
  if (descriptor.hasInheritance() && !xsiTypeIndicatorField) {
    xmlDescriptor.getInheritancePolicy().addClassIndicatorFieldToRow(record);
    return true;
  }
  QName leafType=null;
  if (xmlField != null) {
    leafType=xmlField.getLeafElementType();
    XMLSchemaReference xmlRef=xmlDescriptor.getSchemaReference();
    if (xmlRef != null) {
      if (leafType == null) {
        if (xmlRef.getType() == XMLSchemaReference.ELEMENT) {
          return false;
        }
        if (referenceDescriptor == null) {
          writeXsiTypeAttribute(xmlDescriptor,record,xmlRef,addToNamespaceResolver);
          return true;
        }
      }
 else       if (((xmlRef.getType() == XMLSchemaReference.COMPLEX_TYPE) || (xmlRef.getType() == XMLSchemaReference.SIMPLE_TYPE)) && xmlRef.getSchemaContext() != null && xmlRef.isGlobalDefinition()) {
        QName ctxQName=xmlRef.getSchemaContextAsQName(xmlDescriptor.getNamespaceResolver());
        if (!ctxQName.equals(leafType)) {
          writeXsiTypeAttribute(xmlDescriptor,record,xmlRef,addToNamespaceResolver);
          return true;
        }
      }
    }
  }
  if (referenceDescriptor != null && referenceDescriptor == xmlDescriptor) {
    return false;
  }
  if (xmlDescriptor.hasInheritance() && !xmlDescriptor.getInheritancePolicy().isRootParentDescriptor()) {
    InheritancePolicy inheritancePolicy=xmlDescriptor.getInheritancePolicy();
    XMLField indicatorField=(XMLField)inheritancePolicy.getClassIndicatorField();
    if (indicatorField != null && xsiTypeIndicatorField) {
      Object classIndicatorValueObject=inheritancePolicy.getClassIndicatorMapping().get(xmlDescriptor.getJavaClass());
      String classIndicatorUri=null;
      String classIndicatorLocal=null;
      String classIndicatorPrefix=null;
      if (classIndicatorValueObject instanceof QName) {
        QName classIndicatorQName=(QName)classIndicatorValueObject;
        classIndicatorUri=classIndicatorQName.getNamespaceURI();
        classIndicatorLocal=classIndicatorQName.getLocalPart();
        classIndicatorPrefix=classIndicatorQName.getPrefix();
      }
 else {
        String classIndicatorValue=(String)inheritancePolicy.getClassIndicatorMapping().get(xmlDescriptor.getJavaClass());
        int nsindex=classIndicatorValue.indexOf(XMLConstants.COLON);
        String prefix=null;
        if (nsindex != -1) {
          classIndicatorLocal=classIndicatorValue.substring(nsindex + 1);
          prefix=classIndicatorValue.substring(0,nsindex);
        }
 else {
          classIndicatorLocal=classIndicatorValue;
        }
        classIndicatorUri=xmlDescriptor.getNonNullNamespaceResolver().resolveNamespacePrefix(prefix);
      }
      if (leafType == null || !(leafType.getLocalPart().equals(classIndicatorLocal)) || (classIndicatorUri == null && (leafType.getNamespaceURI() != null && leafType.getNamespaceURI().length() > 0)) || (classIndicatorUri != null && !classIndicatorUri.equals(leafType.getNamespaceURI()))) {
        if (inheritancePolicy.hasClassExtractor()) {
          inheritancePolicy.addClassIndicatorFieldToRow(record);
        }
 else {
          writeXsiTypeAttribute(xmlDescriptor,record,classIndicatorUri,classIndicatorLocal,classIndicatorPrefix,addToNamespaceResolver);
        }
        return true;
      }
      return false;
    }
  }
  return false;
}