- null, ds, out warn, cref, false, null).Member as Type;
- }
-
- private static MemberInfo [] empty_member_infos =
- new MemberInfo [0];
-
- private static MemberInfo [] FindMethodBase (Type type,
- BindingFlags bindingFlags, MethodSignature signature)
- {
- MemberList ml = TypeManager.FindMembers (
- type,
- MemberTypes.Constructor | MemberTypes.Method | MemberTypes.Property | MemberTypes.Custom,
- bindingFlags,
- MethodSignature.method_signature_filter,
- signature);
- if (ml == null)
- return empty_member_infos;
-
- return FilterOverridenMembersOut (type, (MemberInfo []) ml);
- }
-
- static bool IsOverride (PropertyInfo deriv_prop, PropertyInfo base_prop)
- {
- if (!Invocation.IsAncestralType (base_prop.DeclaringType, deriv_prop.DeclaringType))
- return false;
-
- Type [] deriv_pd = TypeManager.GetArgumentTypes (deriv_prop);
- Type [] base_pd = TypeManager.GetArgumentTypes (base_prop);
-
- if (deriv_pd.Length != base_pd.Length)
- return false;
-
- for (int j = 0; j < deriv_pd.Length; ++j) {
- if (deriv_pd [j] != base_pd [j])
- return false;
- Type ct = TypeManager.TypeToCoreType (deriv_pd [j]);
- Type bt = TypeManager.TypeToCoreType (base_pd [j]);
-
- if (ct != bt)
- return false;
- }
-
- return true;
- }
-
- private static MemberInfo [] FilterOverridenMembersOut (
- Type type, MemberInfo [] ml)
- {
- if (ml == null)
- return empty_member_infos;
-
- ArrayList al = new ArrayList (ml.Length);
- for (int i = 0; i < ml.Length; i++) {
- MethodBase mx = ml [i] as MethodBase;
- PropertyInfo px = ml [i] as PropertyInfo;
- if (mx != null || px != null) {
- bool overriden = false;
- for (int j = 0; j < ml.Length; j++) {
- if (j == i)
- continue;
- MethodBase my = ml [j] as MethodBase;
- if (mx != null && my != null &&
- Invocation.IsOverride (my, mx)) {
- overriden = true;
- break;
- }
- else if (mx != null)
- continue;
- PropertyInfo py = ml [j] as PropertyInfo;
- if (px != null && py != null &&
- IsOverride (py, px)) {
- overriden = true;
- break;
- }
- }
- if (overriden)
- continue;
- }
- al.Add (ml [i]);
- }
- return al.ToArray (typeof (MemberInfo)) as MemberInfo [];
- }
-
- struct FoundMember
- {
- public static FoundMember Empty = new FoundMember (true);
-
- public bool IsEmpty;
- public readonly MemberInfo Member;
- public readonly Type Type;
-
- public FoundMember (bool regardlessOfThisValueItsEmpty)
- {
- IsEmpty = true;
- Member = null;
- Type = null;
- }
-
- public FoundMember (Type foundType, MemberInfo member)
- {
- IsEmpty = false;
- Type = foundType;
- Member = member;
- }