/// <summary> /// Interpret IL instructions to find references to other type members /// </summary> private void InterpretBody() { Bodies.ForEach(B => { List <Instruction> calls = B.GetCallInstructions(); calls.ForEach(Ic => DeclaringType.Architecture.BaseTypes.ForEach(t => { List <MemberInfo> refMembers = t.GetMyMembers().FindAll(m => Ic.Operand.Contains(m.ArchName())); DirectRefMembers.AddRange(refMembers); })); }); }
/// <summary> /// Post-initialization Architech Members Referenced /// </summary> /// <param name="includingSelf"></param> /// <returns></returns> public ArchList <ArchitectMember> ReferencedMembers(bool includingSelf) { ArchList <ArchitectMember> alist = new ArchList <ArchitectMember>(); if (referencedMembers == null) { DeclaringType.Architecture.Types.ForEach(A => { alist.AddRange(A.Members.FindAll(M => DirectRefMembers.Contains(M.Member))); }); referencedMembers = alist; } else { referencedMembers.ForEach(M => alist.Add(M)); } if (!includingSelf) { alist.RemoveAll(M => M.DeclaringType == DeclaringType); } return(alist.Clean()); }