Program: 65583
Project: 65583
Buggy source:
/** 
 * Process a given JavaType's attributes.
 * @param javaType
 * @param typeInfo
 * @param nsInfo
 */
private void processJavaType(JavaType javaType,TypeInfo typeInfo,NamespaceInfo nsInfo){
  if (null != javaType.getJavaAttributes()) {
    List<String> processedPropertyNames=new ArrayList<String>();
    for (    JAXBElement jaxbElement : javaType.getJavaAttributes().getJavaAttribute()) {
      JavaAttribute javaAttribute=(JavaAttribute)jaxbElement.getValue();
      Property originalProperty=typeInfo.getOriginalProperties().get(javaAttribute.getJavaAttribute());
      if (originalProperty == null) {
        if (typeInfo.getXmlVirtualAccessMethods() != null) {
          Property newProperty=new Property(this.aProcessor.getHelper());
          newProperty.setPropertyName(javaAttribute.getJavaAttribute());
          newProperty.setExtension(true);
          String attributeType=null;
          if (javaAttribute instanceof XmlElement) {
            attributeType=((XmlElement)javaAttribute).getType();
          }
 else           if (javaAttribute instanceof XmlAttribute) {
            attributeType=((XmlAttribute)javaAttribute).getType();
          }
          if (attributeType != null && attributeType.equals("String_Node_Str")) {
            newProperty.setType(jModelInput.getJavaModel().getClass(attributeType));
          }
 else {
            newProperty.setType(jModelInput.getJavaModel().getClass(Helper.STRING));
          }
          originalProperty=newProperty;
          typeInfo.addProperty(javaAttribute.getJavaAttribute(),newProperty);
        }
 else {
          getLogger().logWarning(JAXBMetadataLogger.NO_PROPERTY_FOR_JAVA_ATTRIBUTE,new Object[]{javaAttribute.getJavaAttribute(),javaType.getName()});
          continue;
        }
      }
      boolean alreadyProcessed=processedPropertyNames.contains(javaAttribute.getJavaAttribute());
      Property propToProcess;
      if (alreadyProcessed) {
        propToProcess=(Property)originalProperty.clone();
      }
 else {
        propToProcess=typeInfo.getProperties().get(javaAttribute.getJavaAttribute());
      }
      processJavaAttribute(typeInfo,javaAttribute,propToProcess,nsInfo,javaType);
      if (propToProcess.isTransient()) {
        typeInfo.getPropertyList().remove(propToProcess);
      }
      if (alreadyProcessed) {
        List<Property> additionalProps=typeInfo.getAdditionalProperties().get(javaAttribute.getJavaAttribute());
        if (additionalProps == null) {
          additionalProps=new ArrayList<Property>();
        }
        additionalProps.add(propToProcess);
        typeInfo.getAdditionalProperties().put(javaAttribute.getJavaAttribute(),additionalProps);
      }
 else {
        typeInfo.getProperties().put(javaAttribute.getJavaAttribute(),propToProcess);
        processedPropertyNames.add(javaAttribute.getJavaAttribute());
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Process a given JavaType's attributes.
 * @param javaType
 * @param typeInfo
 * @param nsInfo
 */
private void processJavaType(JavaType javaType,TypeInfo typeInfo,NamespaceInfo nsInfo){
  if (null != javaType.getJavaAttributes()) {
    List<String> processedPropertyNames=new ArrayList<String>();
    for (    JAXBElement jaxbElement : javaType.getJavaAttributes().getJavaAttribute()) {
      JavaAttribute javaAttribute=(JavaAttribute)jaxbElement.getValue();
      Property originalProperty=typeInfo.getOriginalProperties().get(javaAttribute.getJavaAttribute());
      if (originalProperty == null) {
        if (typeInfo.getXmlVirtualAccessMethods() != null) {
          Property newProperty=new Property(this.aProcessor.getHelper());
          newProperty.setPropertyName(javaAttribute.getJavaAttribute());
          newProperty.setExtension(true);
          String attributeType=null;
          if (javaAttribute instanceof XmlElement) {
            attributeType=((XmlElement)javaAttribute).getType();
          }
 else           if (javaAttribute instanceof XmlAttribute) {
            attributeType=((XmlAttribute)javaAttribute).getType();
          }
          if (attributeType != null && attributeType.equals("String_Node_Str")) {
            newProperty.setType(jModelInput.getJavaModel().getClass(attributeType));
          }
 else {
            newProperty.setType(jModelInput.getJavaModel().getClass(Helper.STRING));
          }
          originalProperty=newProperty;
          typeInfo.addProperty(javaAttribute.getJavaAttribute(),newProperty);
        }
 else {
          getLogger().logWarning(JAXBMetadataLogger.NO_PROPERTY_FOR_JAVA_ATTRIBUTE,new Object[]{javaAttribute.getJavaAttribute(),javaType.getName()});
          continue;
        }
      }
      boolean alreadyProcessed=processedPropertyNames.contains(javaAttribute.getJavaAttribute());
      Property propToProcess;
      if (alreadyProcessed) {
        propToProcess=(Property)originalProperty.clone();
      }
 else {
        propToProcess=typeInfo.getProperties().get(javaAttribute.getJavaAttribute());
      }
      processJavaAttribute(typeInfo,javaAttribute,propToProcess,nsInfo,javaType);
      if (propToProcess.isTransient()) {
        typeInfo.getPropertyList().remove(propToProcess);
      }
      if (alreadyProcessed) {
        List<Property> additionalProps=null;
        if (typeInfo.hasAdditionalProperties()) {
          additionalProps=typeInfo.getAdditionalProperties().get(javaAttribute.getJavaAttribute());
        }
        if (additionalProps == null) {
          additionalProps=new ArrayList<Property>();
        }
        additionalProps.add(propToProcess);
        typeInfo.getAdditionalProperties().put(javaAttribute.getJavaAttribute(),additionalProps);
      }
 else {
        typeInfo.getProperties().put(javaAttribute.getJavaAttribute(),propToProcess);
        processedPropertyNames.add(javaAttribute.getJavaAttribute());
      }
    }
  }
}