public InvolvedTypeMember(MemberInfo memberInfo, ReflectedObject targetMemberDefinition,
                              IEnumerable<ReflectedObject> mixinMemberDefinitions)
        {
            ArgumentUtility.CheckNotNull("memberInfo", memberInfo);

              MemberInfo = new OverridingMemberInfo(memberInfo);
              AddSubMemberInfos(memberInfo);

              SetMixinOverride(targetMemberDefinition);
              AddTargetOverrides(mixinMemberDefinitions);

              MixinMemberDefinitions = mixinMemberDefinitions ?? Enumerable.Empty<ReflectedObject>();
              TargetMemberDefinition = targetMemberDefinition;

              OverridingMixinTypes = GetOverridingMixinTypes();
              OverridingTargetTypes = GetOverridingTargetTypes();
        }
        public InvolvedTypeMember(MemberInfo memberInfo, ReflectedObject targetMemberDefinition,
                                  IEnumerable <ReflectedObject> mixinMemberDefinitions)
        {
            ArgumentUtility.CheckNotNull("memberInfo", memberInfo);

            MemberInfo = new OverridingMemberInfo(memberInfo);
            AddSubMemberInfos(memberInfo);

            SetMixinOverride(targetMemberDefinition);
            AddTargetOverrides(mixinMemberDefinitions);

            MixinMemberDefinitions = mixinMemberDefinitions ?? Enumerable.Empty <ReflectedObject>();
            TargetMemberDefinition = targetMemberDefinition;

            OverridingMixinTypes  = GetOverridingMixinTypes();
            OverridingTargetTypes = GetOverridingTargetTypes();
        }
        private void AddOverriddenMember(MemberInfo overriddenMember, OverridingMemberInfo.OverrideType type)
        {
            MemberInfo.AddOverriddenMember (overriddenMember, type);

              if (overriddenMember.MemberType == MemberTypes.Property)
              {
            var overriddenProperty = (PropertyInfo) overriddenMember;

            if (overriddenProperty.GetGetMethod () != null && _subMemberInfos.ContainsKey (SubMemberType.PropertyGet))
              _subMemberInfos[SubMemberType.PropertyGet].AddOverriddenMember (overriddenProperty.GetGetMethod (), type);

            if (overriddenProperty.GetSetMethod () != null && _subMemberInfos.ContainsKey (SubMemberType.PropertySet))
              _subMemberInfos[SubMemberType.PropertyGet].AddOverriddenMember (overriddenProperty.GetSetMethod (), type);
              }

              if (overriddenMember.MemberType == MemberTypes.Event)
              {
            var overriddenEvent = (EventInfo) overriddenMember;

            if (_subMemberInfos.ContainsKey (SubMemberType.EventAdd))
              _subMemberInfos[SubMemberType.PropertyGet].AddOverriddenMember(overriddenEvent.GetAddMethod(), type);

            if (_subMemberInfos.ContainsKey (SubMemberType.EventRemove))
              _subMemberInfos[SubMemberType.PropertyGet].AddOverriddenMember(overriddenEvent.GetRemoveMethod(), type);
              }
        }