示例#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
        }