Exemplo n.º 1
0
        //
        // Raised (and passed an XmlElement that contains the comment)
        // when GenerateDocComment is writing documentation expectedly.
        //
        // FIXME: with a few effort, it could be done with XmlReader,
        // that means removal of DOM use.
        //
        internal static void OnMethodGenerateDocComment(
            MethodCore mc, XmlElement el, Report Report)
        {
            var paramTags = new Dictionary <string, string> ();

            foreach (XmlElement pelem in el.SelectNodes("param"))
            {
                string xname = pelem.GetAttribute("name");
                if (xname.Length == 0)
                {
                    continue;                     // really? but MS looks doing so
                }
                if (xname != "" && mc.ParameterInfo.GetParameterIndexByName(xname) < 0)
                {
                    Report.Warning(1572, 2, mc.Location, "XML comment on `{0}' has a param tag for `{1}', but there is no parameter by that name",
                                   mc.GetSignatureForError(), xname);
                }
                else if (paramTags.ContainsKey(xname))
                {
                    Report.Warning(1571, 2, mc.Location, "XML comment on `{0}' has a duplicate param tag for `{1}'",
                                   mc.GetSignatureForError(), xname);
                }
                paramTags [xname] = xname;
            }
            IParameterData [] plist = mc.ParameterInfo.FixedParameters;
            foreach (Parameter p in plist)
            {
                if (paramTags.Count > 0 && !paramTags.ContainsKey(p.Name))
                {
                    Report.Warning(1573, 4, mc.Location, "Parameter `{0}' has no matching param tag in the XML comment for `{1}'",
                                   p.Name, mc.GetSignatureForError());
                }
            }
        }
Exemplo n.º 2
0
        MemberList GetMemberList()
        {
            var result = LazyInit.VolatileRead(ref this.memberList);

            if (result != null)
            {
                return(result);
            }
            List <IUnresolvedMember>   unresolvedMembers = new List <IUnresolvedMember>();
            List <ITypeResolveContext> contextPerMember  = new List <ITypeResolveContext>();
            bool addDefaultConstructorIfRequired         = false;

            foreach (IUnresolvedTypeDefinition part in parts)
            {
                ITypeResolveContext parentContextForPart = part.CreateResolveContext(parentContext);
                ITypeResolveContext contextForPart       = parentContextForPart.WithCurrentTypeDefinition(this);
                foreach (var member in part.Members)
                {
                    IUnresolvedMethod method = member as IUnresolvedMethod;

                    unresolvedMembers.Add(member);
                    contextPerMember.Add(contextForPart);
                }

                addDefaultConstructorIfRequired |= part.AddDefaultConstructorIfRequired;
            }
            if (addDefaultConstructorIfRequired)
            {
                TypeKind kind = this.Kind;
                if (kind == TypeKind.Class && !this.IsStatic && !unresolvedMembers.Any(m => m.SymbolKind == SymbolKind.Constructor && !m.IsStatic) ||
                    kind == TypeKind.Enum || kind == TypeKind.Struct)
                {
                    contextPerMember.Add(parts[0].CreateResolveContext(parentContext).WithCurrentTypeDefinition(this));
                    unresolvedMembers.Add(MethodCore.CreateDefaultConstructor(parts[0]));
                }
            }
            result = new MemberList(contextPerMember, unresolvedMembers);
            return(LazyInit.GetOrSet(ref this.memberList, result));
        }
Exemplo n.º 3
0
 internal static void OnMethodGenerateDocComment(MethodCore mc, XmlElement el, Report r)
 {
 }
Exemplo n.º 4
0
 public ResolvedMethodSpec(MethodCore unresolved, ITypeResolveContext parentContext)
     : this(unresolved, parentContext, unresolved.IsExtensionMethod)
 {
 }