/**
   * appends metadata associated with a definition.
   *
   * @param metadata
   */
  private void emitMetadata(List metadata) {
    for (int i = 0; i < metadata.size(); i++) {
      DocComment meta = (DocComment) metadata.get(i);
      String metadataType = meta.getMetadataType().intern();
      xml.append("\n<metadata>\n");
      xml.append("\t<");
      xml.append(metadataType);
      xml.append(" owner='");
      xml.append(meta.getOwner());
      xml.append("' ");
      String name = meta.getName();
      if (!name.equals("IGNORE")) xml.append("name='").append(name).append("' ");
      String type_meta = meta.getType_meta();
      if (type_meta != null) {
        xml.append("type='").append(type_meta).append("' ");
      }

      String event_meta = meta.getEvent_meta();
      if (event_meta != null) {
        xml.append("event='").append(event_meta).append("' ");
      }
      String kind_meta = meta.getKind_meta();
      if (kind_meta != null) {
        xml.append("kind='").append(kind_meta).append("' ");
      }
      String arrayType_meta = meta.getArrayType_meta();
      if (arrayType_meta != null) {
        xml.append("arrayType='").append(arrayType_meta).append("' ");
      }
      String format_meta = meta.getFormat_meta();
      if (format_meta != null) {
        xml.append("format='").append(format_meta).append("' ");
      }
      String enumeration_meta = meta.getEnumeration_meta();
      if (enumeration_meta != null) {
        xml.append("enumeration='").append(enumeration_meta).append("' ");
      }
      String inherit_meta = meta.getInherit_meta();
      if (inherit_meta != null) {
        xml.append("inherit='").append(inherit_meta).append("' ");
      }

      if (metadataType == StandardDefs.MD_EVENT) {
        // if message meta data is present then emit it. Applicable for Deprecation
        String message_meta = meta.getMessage_meta();
        if (message_meta != null) {
          xml.append("deprecatedMessage='").append(message_meta).append("' ");
        }

        // if replacement meta data is present then emit it. Applicable for Deprecation
        String replacement_meta = meta.getReplacement_meta();
        if (replacement_meta != null) {
          xml.append("deprecatedReplacement='").append(replacement_meta).append("' ");
        }

        // if since meta data is present then emit it. Applicable for Deprecation
        String since_meta = meta.getSince_meta();
        if (since_meta != null) {
          xml.append("deprecatedSince='").append(since_meta).append("' ");
        }
      } else if (metadataType == StandardDefs.MD_SKINPART) {
        String variableType_meta = meta.getVariableType_meta();
        if (variableType_meta != null) {
          xml.append("var_type='").append(variableType_meta).append("' ");
        }

        String required_meta = meta.getRequired_meta();
        if (required_meta != null) {
          xml.append("required='").append(required_meta).append("' ");
        } else {
          // false is now the default value for required in case of SkinPart.
          xml.append("required='false' ");
        }
      } else {
        // if message meta data is present then emit it. Applicable for Deprecation
        String message_meta = meta.getMessage_meta();
        if (message_meta != null) {
          xml.append("message='").append(message_meta).append("' ");
        }

        // if replacement meta data is present then emit it. Applicable for Deprecation
        String replacement_meta = meta.getReplacement_meta();
        if (replacement_meta != null) {
          xml.append("replacement='").append(replacement_meta).append("' ");
        }

        // if since meta data is present then emit it. Applicable for Deprecation
        String since_meta = meta.getSince_meta();
        if (since_meta != null) {
          xml.append("since='").append(since_meta).append("' ");
        }
      }

      xml.append(">");

      // These types of metadata can have comments associated with them
      if (metadataType == StandardDefs.MD_EVENT
          || metadataType == StandardDefs.MD_SKINSTATE
          || metadataType == StandardDefs.MD_SKINPART
          || metadataType == StandardDefs.MD_ALTERNATIVE
          || metadataType == StandardDefs.MD_DISCOURAGEDFORPROFILE
          || metadataType == StandardDefs.MD_EXPERIMENTAL) {
        String desc = meta.getDescription();
        if (desc != null) appendTag("description", meta.getDescription());
        emitTags(meta.getAllTags());
      }
      xml.append("\n\t</");
      xml.append(metadataType);
      xml.append(">\n</metadata>");
    }
  }