Exemple #1
0
        /// <summary>
        /// Parses a .Net XML documentation type, method, or other member name.
        /// </summary>
        /// <param name="name">
        ///   <list>
        ///     <item>Names starting with "T:" are parsed as Type names.</item>
        ///     <item>Names starting with "M:" are parsed as Method names.</item>
        ///     <item>Names starting with "F:" are parsed as Member names.</item>
        ///     <item>Names starting with "P:" are parsed as Member names.</item>
        ///     <item>Names starting with "E:" are parsed as Member names.</item>
        ///     <item>All others are parsed as Member names.</item>
        ///   </list>
        /// </param>
        public static DotNetQualifiedName FromVisualStudioXml(string name)
        {
            if (String.IsNullOrEmpty(name))
            {
                return(new DotNetQualifiedName());
            }

            if (name.Length < 2 || name[1] != ':')
            {
                return(MemberNameFromVisualStudioXml(name));
            }

            switch (name[0])
            {
            case 'T': return(DotNetQualifiedClassName.FromVisualStudioXml(name));

            case 'M': return(DotNetQualifiedMethodName.FromVisualStudioXml(name));

            case 'F':
            case 'P':
            case 'E': return(MemberNameFromVisualStudioXml(name));

            default: return(MemberNameFromVisualStudioXml(name));
            }
        }
        /// <summary>
        /// Parse .Net XML documentation for method signature data.
        /// </summary>
        /// <param name="memberElement">Expects tag "member".</param>
        /// <example><![CDATA[<member name="M:Namespace.Type.MethodName(System.Int32,System.String)"></member>]]></example>
        public static DotNetMethod FromVisualStudioXml(XElement memberElement)
        {
            string signature = memberElement.GetAttributeValue("name");

            if (signature == null)
            {
                return(new DotNetMethod());
            }

            DotNetQualifiedMethodName methodName = DotNetQualifiedMethodName.FromVisualStudioXml(signature);

            //for constructors
            bool isConstructor = (methodName.LocalName.EndsWith("#ctor") || methodName.LocalName.EndsWith("#cctor"));
            bool isStatic      = methodName.LocalName.EndsWith("#cctor");

            //for destructors
            bool isDestructor = (methodName.LocalName == "Finalize" && methodName.Parameters.Count == 0);

            //for operators
            bool isOperator = methodName.LocalName.StartsWith("op_");

            DotNetMethod method = null;

            if (isConstructor)
            {
                method = new DotNetMethodConstructor(methodName, isStatic);
            }
            else if (isDestructor)
            {
                method = new DotNetMethodDestructor(methodName);
            }
            else if (isOperator)
            {
                method = new DotNetMethodOperator(methodName);
            }
            else
            {
                method = new DotNetMethod(methodName);
            }

            method.ParseVisualStudioXmlDocumentation(memberElement);

            return(method);
        }
        /// <summary>Parses .Net XML documentation cref for methods.</summary>
        /// <example><![CDATA[<permission cref="Namespace.Type.Method(Type1, Type2)">nested comments and/or plain text</permission>]]></example>
        public static new DotNetCommentMethodLink FromVisualStudioXml(string cref)
        {
            DotNetQualifiedMethodName name = DotNetQualifiedMethodName.FromVisualStudioXml(cref);

            return(new DotNetCommentMethodLink(name));
        }