/// <summary>
        /// Retrieve only call, calli, and callvirt instructions from the stream
        /// </summary>
        /// <returns></returns>
        public ArchList <Instruction> GetCallInstructions()
        {
            ArchList <Instruction> list = new ArchList <Instruction>();

            list.AddRange(InstructionStream.FindAll(I => I.Code.Name.Contains("call")));
            list.AddRange(StrayInstructions.FindAll(I => I.Code.Name.Contains("call")));
            return(list);
        }
        /// <summary>
        /// Find all ArchitectTypes that reference this Type
        /// </summary>
        /// <param name="includingSelf"></param>
        /// <returns></returns>
        public ArchList <ArchitectType> ReferentTypes(bool includingSelf)
        {
            ArchList <ArchitectType> alist = new ArchList <ArchitectType>();

            Members.ForEach(M => alist.AddRange(M.ReferentTypes(includingSelf)));
            return(alist.Clean());
        }
        /// <summary>
        /// ArchitectMembers of this type that are referenced by other members
        /// </summary>
        /// <param name="includingSelf"></param>
        /// <returns></returns>
        public ArchList <ArchitectMember> ReferentMembers(bool includingSelf)
        {
            // found by reverse analyzing each type ReferencedMembers
            ArchList <ArchitectMember> alist = new ArchList <ArchitectMember>();

            Members.ForEach(M => alist.AddRange(M.ReferentMembers(includingSelf)));
            return(alist.Clean());
        }
        /// <summary>
        /// Post-initialization Architech Members Referenced
        /// </summary>
        /// <param name="includingSelf"></param>
        /// <returns></returns>
        public ArchList <ArchitectMember> ReferentMembers(bool includingSelf)
        {
            ArchList <ArchitectMember> alist = new ArchList <ArchitectMember>();

            if (referentMembers == null)
            {
                DeclaringType.Architecture.Types.ForEach(A =>
                                                         { alist.AddRange(A.Members.FindAll(M => M.ReferencedMembers(includingSelf).Contains(this))); });
                referentMembers = alist;
            }
            else
            {
                referentMembers.ForEach(M => alist.Add(M));
            }

            if (!includingSelf)
            {
                alist.RemoveAll(M => M.DeclaringType == DeclaringType);
            }
            return(alist.Clean());
        }