示例#1
0
        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
        }
示例#2
0
        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);
        }
示例#3
0
 internal void AddSignature(SignatureEntry signature)
 {
     m_SignatureList.Add(signature);
 }