private MemberItem HandleMemberAndSignature(string itemName, string signatureName, AsmEntry asmEntry, MemberItem parentItem) { asmEntry.Private = m_ScanForPrivateMembers; //HACK SPECIAL CASE if (SkipSpecialCaseMember(itemName)) { return(null); } // Create member item if not already existing if (!m_MapNameToItem.ContainsKey(itemName)) { if (!m_ScanForPrivateMembers) { m_MapNameToItem[itemName] = new MemberItem(itemName, asmEntry.EntryType); } else { return(null); } } else if (!m_ScanForPrivateMembers && !m_MapNameToItem[itemName].MultipleSignaturesPossible) { Console.WriteLine("Same member name found twice for {0} (multiple signatures should not be possible for this type)", itemName); } // Get member item MemberItem item = m_MapNameToItem[itemName]; // Create signature if (!item.ContainsSignature(signatureName)) { var sigEntry = new SignatureEntry(signatureName); sigEntry.AddFromAssembly(asmEntry); item.AddSignature(sigEntry); } else { if (!m_ScanForPrivateMembers) { Console.WriteLine("We should not see the same signature entry twice!! for {0} : {1}.", itemName, signatureName); } else { var sigEntry = item.GetSignature(signatureName, true); if (!sigEntry.InAsm) { sigEntry.AddFromAssembly(asmEntry); } } } if (item != null && parentItem != null && !parentItem.ChildMembers.Contains(item)) { parentItem.ChildMembers.Add(item); } return(item); //the item we just populated, may or may not be used }
public MemDocModel LoadDoc(string memFileContent, ELanguage language = ELanguage.English, bool updateMemberSignaturesAndFlags = true, bool assignDocToMemberItem = true) { bool translated = language != ELanguage.English; // Create new MemDocModel MemDocModel memDocModel = new MemDocModel(memFileContent) { Language = language, AssemblyKind = ItemType }; InitializeDocSignaturesIfNone(memDocModel); if (assignDocToMemberItem) { if (translated) { DocModelTranslated = memDocModel; } else { DocModel = memDocModel; } } if (updateMemberSignaturesAndFlags) { // Remove old (possibly outdated) doc info from member signature list for (int i = m_SignatureList.Count - 1; i >= 0; i--) { if (translated) { m_SignatureList[i].InDocTranslated = false; } else { m_SignatureList[i].InDoc = false; } if (!m_SignatureList[i].InAsm && !m_SignatureList[i].InDoc && !m_SignatureList[i].InDocTranslated) { m_SignatureList.RemoveAt(i); } } // Populate member signature list with signatures from (updated) doc foreach (string signature in memDocModel.SignatureListFromAllBlocks) { if (!m_SignatureList.Any(e => (e.Name == signature))) { m_SignatureList.Add(new SignatureEntry(signature)); } SignatureEntry signatureEntry = m_SignatureList.First(e => e.Name == signature); var subSection = memDocModel.SubSectionOfSignature(signature); if (subSection != null) { subSection.SignatureEntryList.Add(signatureEntry); } if (translated) { signatureEntry.InDocTranslated = true; } else { signatureEntry.InDoc = true; } //if (signatureEntry.InAsm && signatureEntry.Asm.Private) // System.Console.WriteLine ("Private documented signature "+signature+" in member "+ItemName); } UpdateFlags(); } // Add assembly information to MemberDocModel memDocModel.ProcessAsm(this); return(memDocModel); }
internal void AddSignature(SignatureEntry signature) { m_SignatureList.Add(signature); }