GetSupportedAttributes() protected method

protected GetSupportedAttributes ( ) : string[]
return string[]
        private void AddTraceListener(IDictionary d, XmlNode child, XmlAttributeCollection attributes, TraceListenerCollection listeners)
        {
            string name = GetAttribute(attributes, "name", true, child);
            string type = null;

#if CONFIGURATION_DEP
            type = GetAttribute(attributes, "type", false, child);
            if (type == null)
            {
                // indicated by name.
                TraceListener shared = GetSharedListeners(d) [name];
                if (shared == null)
                {
                    throw new ConfigurationException(String.Format("Shared trace listener {0} does not exist.", name));
                }
                if (attributes.Count != 0)
                {
                    throw new ConfigurationErrorsException(string.Format(
                                                               "Listener '{0}' references a shared " +
                                                               "listener and can only have a 'Name' " +
                                                               "attribute.", name));
                }
                listeners.Add(shared, configValues);
                return;
            }
#else
            type = GetAttribute(attributes, "type", true, child);
#endif

            Type t = Type.GetType(type);
            if (t == null)
            {
                throw new ConfigurationException(string.Format("Invalid Type Specified: {0}", type));
            }

            object[] args;
            Type[]   types;

            string initializeData = GetAttribute(attributes, "initializeData", false, child);
            if (initializeData != null)
            {
                args  = new object[] { initializeData };
                types = new Type[] { typeof(string) };
            }
            else
            {
                args  = null;
                types = Type.EmptyTypes;
            }

            BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
            if (t.Assembly == GetType().Assembly)
            {
                flags |= BindingFlags.NonPublic;
            }

            ConstructorInfo ctor = t.GetConstructor(flags, null, types, null);
            if (ctor == null)
            {
                throw new ConfigurationException("Couldn't find constructor for class " + type);
            }

            TraceListener l = (TraceListener)ctor.Invoke(args);
            l.Name = name;

#if CONFIGURATION_DEP
            string trace = GetAttribute(attributes, "traceOutputOptions", false, child);
            if (trace != null)
            {
                if (trace != trace.Trim())
                {
                    throw new ConfigurationErrorsException(string.Format(
                                                               "Invalid value '{0}' for 'traceOutputOptions'.",
                                                               trace), child);
                }

                TraceOptions trace_options;

                try {
                    trace_options = (TraceOptions)Enum.Parse(
                        typeof(TraceOptions), trace);
                } catch (ArgumentException) {
                    throw new ConfigurationErrorsException(string.Format(
                                                               "Invalid value '{0}' for 'traceOutputOptions'.",
                                                               trace), child);
                }

                l.TraceOutputOptions = trace_options;
            }

            string [] supported_attributes = l.GetSupportedAttributes();
            if (supported_attributes != null)
            {
                for (int i = 0; i < supported_attributes.Length; i++)
                {
                    string key   = supported_attributes [i];
                    string value = GetAttribute(attributes, key, false, child);
                    if (value != null)
                    {
                        l.Attributes.Add(key, value);
                    }
                }
            }
#endif

            listeners.Add(l, configValues);
        }