Program: 65851
Project: 65851
Buggy source:
/** 
 * Generate a mapping for a given Property.
 * @param property
 * @param descriptor
 * @param namespaceInfo
 * @return newly created mapping
 */
public DatabaseMapping generateMapping(Property property,XMLDescriptor descriptor,NamespaceInfo namespaceInfo){
  if (property.isSetXmlJavaTypeAdapter()) {
    if (property.isReference()) {
      return generateMappingForReferenceProperty(property,descriptor,namespaceInfo);
    }
    XmlJavaTypeAdapter xja=property.getXmlJavaTypeAdapter();
    JavaClass adapterClass=helper.getJavaClass(xja.getValue());
    JavaClass valueType=property.getActualType();
    DatabaseMapping mapping;
    if (typeInfo.containsKey(valueType.getQualifiedName())) {
      if (isCollectionType(property)) {
        mapping=generateCompositeCollectionMapping(property,descriptor,namespaceInfo,valueType.getQualifiedName());
        ((XMLCompositeCollectionMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
 else {
        mapping=generateCompositeObjectMapping(property,descriptor,namespaceInfo,valueType.getQualifiedName());
        ((XMLCompositeObjectMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
    }
 else {
      if (property.isAny()) {
        if (isCollectionType(property)) {
          mapping=generateAnyCollectionMapping(property,descriptor,namespaceInfo,property.isMixedContent());
          ((XMLAnyCollectionMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
 else {
          mapping=generateAnyObjectMapping(property,descriptor,namespaceInfo);
          ((XMLAnyObjectMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
      }
 else       if (isCollectionType(property)) {
        if (property.isSwaAttachmentRef() || property.isMtomAttachment()) {
          mapping=generateBinaryDataCollectionMapping(property,descriptor,namespaceInfo);
          ((XMLBinaryDataCollectionMapping)mapping).setValueConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
 else {
          mapping=generateDirectCollectionMapping(property,descriptor,namespaceInfo);
          ((XMLCompositeDirectCollectionMapping)mapping).setValueConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
      }
 else       if (property.isSwaAttachmentRef() || property.isMtomAttachment()) {
        mapping=generateBinaryMapping(property,descriptor,namespaceInfo);
        ((XMLBinaryDataMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
 else {
        mapping=generateDirectMapping(property,descriptor,namespaceInfo);
        ((XMLDirectMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
    }
    return mapping;
  }
  if (property.isSetXmlJoinNodes()) {
    if (isCollectionType(property)) {
      return generateXMLCollectionReferenceMapping(property,descriptor,namespaceInfo,property.getActualType());
    }
    return generateXMLObjectReferenceMapping(property,descriptor,namespaceInfo,property.getType());
  }
  if (property.isXmlTransformation()) {
    return generateTransformationMapping(property,descriptor,namespaceInfo);
  }
  if (property.isChoice()) {
    if (this.isCollectionType(property)) {
      return generateChoiceCollectionMapping(property,descriptor,namespaceInfo);
    }
    return generateChoiceMapping(property,descriptor,namespaceInfo);
  }
  if (property.isInverseReference()) {
    return generateInverseReferenceMapping(property,descriptor,namespaceInfo);
  }
  if (property.isAny()) {
    if (isCollectionType(property)) {
      return generateAnyCollectionMapping(property,descriptor,namespaceInfo,property.isMixedContent());
    }
    return generateAnyObjectMapping(property,descriptor,namespaceInfo);
  }
  if (property.isReference()) {
    return generateMappingForReferenceProperty(property,descriptor,namespaceInfo);
  }
  if (property.isMap()) {
    if (property.isAnyAttribute()) {
      return generateAnyAttributeMapping(property,descriptor,namespaceInfo);
    }
    return generateMapMapping(property,descriptor,namespaceInfo);
  }
  if (isCollectionType(property)) {
    return generateCollectionMapping(property,descriptor,namespaceInfo);
  }
  JavaClass referenceClass=property.getType();
  String referenceClassName=referenceClass.getRawName();
  if (referenceClass.isArray() && !referenceClassName.equals("String_Node_Str")) {
    JavaClass componentType=referenceClass.getComponentType();
    TypeInfo reference=typeInfo.get(componentType.getName());
    if (reference != null || componentType.isArray()) {
      return generateCompositeCollectionMapping(property,descriptor,namespaceInfo,componentType.getQualifiedName());
    }
    return generateDirectCollectionMapping(property,descriptor,namespaceInfo);
  }
  if (property.isXmlIdRef()) {
    return generateXMLObjectReferenceMapping(property,descriptor,namespaceInfo,referenceClass);
  }
  TypeInfo reference=typeInfo.get(referenceClass.getQualifiedName());
  if (reference != null) {
    if (reference.isEnumerationType()) {
      return generateDirectEnumerationMapping(property,descriptor,namespaceInfo,(EnumTypeInfo)reference);
    }
    return generateCompositeObjectMapping(property,descriptor,namespaceInfo,referenceClass.getQualifiedName());
  }
  if (property.isSwaAttachmentRef() || property.isMtomAttachment()) {
    return generateBinaryMapping(property,descriptor,namespaceInfo);
  }
  if (referenceClass.getQualifiedName().equals(OBJECT_CLASS_NAME) && !property.isAttribute()) {
    XMLCompositeObjectMapping coMapping=generateCompositeObjectMapping(property,descriptor,namespaceInfo,null);
    coMapping.setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT);
    return coMapping;
  }
  return generateDirectMapping(property,descriptor,namespaceInfo);
}

Fixed version (ground truth):
/** 
 * Generate a mapping for a given Property.
 * @param property
 * @param descriptor
 * @param namespaceInfo
 * @return newly created mapping
 */
public DatabaseMapping generateMapping(Property property,XMLDescriptor descriptor,NamespaceInfo namespaceInfo){
  if (property.isSetXmlJavaTypeAdapter()) {
    if (property.isReference()) {
      return generateMappingForReferenceProperty(property,descriptor,namespaceInfo);
    }
    XmlJavaTypeAdapter xja=property.getXmlJavaTypeAdapter();
    JavaClass adapterClass=helper.getJavaClass(xja.getValue());
    JavaClass valueType=property.getActualType();
    DatabaseMapping mapping;
    if (typeInfo.containsKey(valueType.getQualifiedName())) {
      if (isCollectionType(property)) {
        mapping=generateCompositeCollectionMapping(property,descriptor,namespaceInfo,valueType.getQualifiedName());
        ((XMLCompositeCollectionMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
 else {
        mapping=generateCompositeObjectMapping(property,descriptor,namespaceInfo,valueType.getQualifiedName());
        ((XMLCompositeObjectMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
    }
 else {
      if (property.isAny()) {
        if (isCollectionType(property)) {
          mapping=generateAnyCollectionMapping(property,descriptor,namespaceInfo,property.isMixedContent());
          ((XMLAnyCollectionMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
 else {
          mapping=generateAnyObjectMapping(property,descriptor,namespaceInfo);
          ((XMLAnyObjectMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
      }
 else       if (isCollectionType(property)) {
        if (property.isSwaAttachmentRef() || property.isMtomAttachment()) {
          mapping=generateBinaryDataCollectionMapping(property,descriptor,namespaceInfo);
          ((XMLBinaryDataCollectionMapping)mapping).setValueConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
 else {
          mapping=generateDirectCollectionMapping(property,descriptor,namespaceInfo);
          ((XMLCompositeDirectCollectionMapping)mapping).setValueConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
        }
      }
 else       if (property.isSwaAttachmentRef() || property.isMtomAttachment()) {
        mapping=generateBinaryMapping(property,descriptor,namespaceInfo);
        ((XMLBinaryDataMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
 else {
        mapping=generateDirectMapping(property,descriptor,namespaceInfo);
        ((XMLDirectMapping)mapping).setConverter(new XMLJavaTypeConverter(adapterClass.getQualifiedName()));
      }
    }
    return mapping;
  }
  if (property.isSetXmlJoinNodes()) {
    if (isCollectionType(property)) {
      return generateXMLCollectionReferenceMapping(property,descriptor,namespaceInfo,property.getActualType());
    }
    return generateXMLObjectReferenceMapping(property,descriptor,namespaceInfo,property.getType());
  }
  if (property.isXmlTransformation()) {
    return generateTransformationMapping(property,descriptor,namespaceInfo);
  }
  if (property.isChoice()) {
    if (this.isCollectionType(property)) {
      return generateChoiceCollectionMapping(property,descriptor,namespaceInfo);
    }
    return generateChoiceMapping(property,descriptor,namespaceInfo);
  }
  if (property.isInverseReference()) {
    return generateInverseReferenceMapping(property,descriptor,namespaceInfo);
  }
  if (property.isAny()) {
    if (isCollectionType(property)) {
      return generateAnyCollectionMapping(property,descriptor,namespaceInfo,property.isMixedContent());
    }
    return generateAnyObjectMapping(property,descriptor,namespaceInfo);
  }
  if (property.isReference()) {
    return generateMappingForReferenceProperty(property,descriptor,namespaceInfo);
  }
  if (property.isMap()) {
    if (property.isAnyAttribute()) {
      return generateAnyAttributeMapping(property,descriptor,namespaceInfo);
    }
    return generateMapMapping(property,descriptor,namespaceInfo);
  }
  if (isCollectionType(property)) {
    return generateCollectionMapping(property,descriptor,namespaceInfo);
  }
  JavaClass referenceClass=property.getType();
  String referenceClassName=referenceClass.getRawName();
  if (referenceClass.isArray() && !referenceClassName.equals("String_Node_Str")) {
    JavaClass componentType=referenceClass.getComponentType();
    TypeInfo reference=typeInfo.get(componentType.getName());
    if (reference != null && reference.isEnumerationType()) {
      return generateEnumCollectionMapping(property,descriptor,namespaceInfo,(EnumTypeInfo)reference);
    }
    if (reference != null || componentType.isArray()) {
      return generateCompositeCollectionMapping(property,descriptor,namespaceInfo,componentType.getQualifiedName());
    }
    return generateDirectCollectionMapping(property,descriptor,namespaceInfo);
  }
  if (property.isXmlIdRef()) {
    return generateXMLObjectReferenceMapping(property,descriptor,namespaceInfo,referenceClass);
  }
  TypeInfo reference=typeInfo.get(referenceClass.getQualifiedName());
  if (reference != null) {
    if (reference.isEnumerationType()) {
      return generateDirectEnumerationMapping(property,descriptor,namespaceInfo,(EnumTypeInfo)reference);
    }
    return generateCompositeObjectMapping(property,descriptor,namespaceInfo,referenceClass.getQualifiedName());
  }
  if (property.isSwaAttachmentRef() || property.isMtomAttachment()) {
    return generateBinaryMapping(property,descriptor,namespaceInfo);
  }
  if (referenceClass.getQualifiedName().equals(OBJECT_CLASS_NAME) && !property.isAttribute()) {
    XMLCompositeObjectMapping coMapping=generateCompositeObjectMapping(property,descriptor,namespaceInfo,null);
    coMapping.setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT);
    return coMapping;
  }
  return generateDirectMapping(property,descriptor,namespaceInfo);
}