Exemplo n.º 1
0
    // This is the only way we create XML tags (except for Endpoints)
    public XmlNode CreateNode(MetaDataCustomAttribute data,
                              TokenDefinition rule)
    {
        XmlNode node = AddElement(null, rule.xmlTagName);

        // make an attribute for each constructor argument
        if (data.FixedArgs.Length != 0)
        {
            for (int i = 0; i < data.FixedArgs.Length; i++)
            {
                string name = rule.constructorFields[i];
                if (data.FixedArgs[i] == null)
                {
                    AddAttribute(node, name, "");
                }
                else
                {
                    string value = data.FixedArgs[i].ToString();
                    AddAttribute(node, name, value);
                }
            }
        }

        // make an attribute for each constructor-time property
        for (int i = 0; i < data.NamedArgs.Length; i++)
        {
            string name = rule.FindPropertyReplacement(data.NamedArgs[i].Name);
            object arg  = data.NamedArgs[i].Value;
            string value;
            if (arg == null)
            {
                // REVIEW: do we want "" or null here?
                value = null;
            }
            else
            {
                value = data.NamedArgs[i].Value.ToString();
                if (arg is System.UInt32)
                {
                    // We output unsigned types as 0x because they are generally
                    // hardware-related numbers which are documented in hexadecimal.
                    value = String.Format("0x{0:x}", arg);
                }
            }
            AddAttribute(node, name, value);
        }

        // make an attribute for each default field
        for (int i = 0; i < rule.defaultFields.Length; i += 2)
        {
            string name = rule.defaultFields[i];
            AddAttribute(node, name, rule.defaultFields[i + 1]);
        }
        return(node);
    }