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; } } } }
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); }
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; }