示例#1
0
        public void ProcessAsm(MemberItem member)
        {
            foreach (var sig in SignatureList)
            {
                // Don't include private signatures. We don't want the parameter list to include parameters used in private signatures only.
                SignatureEntry signature = member.GetSignature(sig);
                if (signature == null)
                {
                    continue;
                }
                if (!signature.InAsm)
                {
                    continue;
                }

                // Handle parameters
                System.Diagnostics.Debug.Assert(signature.Asm != null, "SignatureEntry.m_Asm for " + sig + " is null in ProcessAsm.");
                if (signature.Asm == null)
                {
                    throw new Exception("SignatureEntry.m_Asm for " + sig + " is null in ProcessAsm.");
                }
                System.Diagnostics.Debug.Assert(signature.Asm.ParamList != null, "SignatureEntry.m_Asm.m_ParamList for " + sig + " is null in ProcessAsm.");
                if (signature.Asm.ParamList == null)
                {
                    throw new Exception("SignatureEntry.m_Asm.m_ParamList for " + sig + " is null in ProcessAsm.");
                }
                foreach (ParamElement param in signature.Asm.ParamList)
                {
                    ParameterWithDoc paramWithDoc = GetParameter(param.Name);
                    if (paramWithDoc == null)
                    {
                        paramWithDoc = new ParameterWithDoc(param.Name);
                        Parameters.Add(paramWithDoc);
                    }
                    paramWithDoc.AddType(param.Type);
                }

                // Handle return type
                if (ReturnDoc != null)
                {
                    if (ReturnDoc.HasAsm)
                    {
                        if (ReturnDoc.ReturnType != signature.Asm.ReturnType)
                        {
                            throw new Exception("Different return types in the same MeaningfulBlock.");
                        }
                    }
                    else
                    {
                        ReturnDoc.ReturnType = signature.Asm.ReturnType;
                    }
                }
            }
        }
示例#2
0
        public ParameterWithDoc GetOrCreateParameter(string name)
        {
            var p = Parameters.FirstOrDefault(m => m.Name == name);

            if (p == null)
            {
                p = new ParameterWithDoc(name);
                Parameters.Add(p);
            }
            return(p);
        }
示例#3
0
        protected void TerminateChunk(StringBuilder accumulator, MemFileState futureState, bool convertExample, bool noCheck)
        {
            string consumeAndTrim = accumulator.ConsumeAndTrimEndAndNewlines();

            if (consumeAndTrim.Length > 0)
            {
                switch (m_CurrentState)
                {
                case MemFileState.Signatures:
                {
                    var sigs = consumeAndTrim.SplitUnixLines();
                    foreach (var sig in sigs)
                    {
                        m_TheBlock.SignatureList.Add(sig);
                    }
                    break;
                }

                case MemFileState.Example:
                {
                    var oneExample = new ExampleBlock(consumeAndTrim)
                    {
                        IsNoCheck        = noCheck,
                        IsConvertExample = convertExample
                    };
                    m_TheBlock.TextBlocks.Add(oneExample);
                    break;
                }

                case MemFileState.Description:
                {
                    if (!m_IsSummaryFound)
                    {
                        var lines = consumeAndTrim.SplitUnixLines();
                        m_TheBlock.Summary = lines[0];
                        consumeAndTrim     = consumeAndTrim.Replace(m_TheBlock.Summary, "");
                        consumeAndTrim     = consumeAndTrim.TrimEndAndNewlines();
                        m_IsSummaryFound   = true;
                        if (consumeAndTrim.Length == 0)
                        {
                            break;
                        }
                    }
                    var oneText = new DescriptionBlock(consumeAndTrim);
                    m_TheBlock.TextBlocks.Add(oneText);
                    break;
                }

                case MemFileState.Param:
                {
                    consumeAndTrim = Regex.Replace(consumeAndTrim, @"@param\s+", "");
                    int              index    = consumeAndTrim.IndexOfAny(new char[] { ' ', '\t' });
                    string           name     = consumeAndTrim.Substring(0, index).Trim();
                    string           doc      = consumeAndTrim.Substring(index + 1).Trim();
                    ParameterWithDoc paramDoc = m_TheBlock.GetOrCreateParameter(name);
                    paramDoc.Doc = doc;
                    break;
                }

                case MemFileState.Return:
                {
                    consumeAndTrim = Regex.Replace(consumeAndTrim, @"@returns?\s+", "");
                    m_TheBlock.GetOrCreateReturnDoc().Doc = consumeAndTrim;
                    break;
                }
                }
            }
            m_CurrentState = futureState;
        }