//Called when class is used as a base class. Need to give the same information as the type would, once this is compiled to IL. //However, bindingAttr is ignored because this method is never legitimately called by something other than the compiler. public override MemberInfo[] GetMembers(BindingFlags bindingAttr) { MemberInfoList mems = new MemberInfoList(); IEnumerator enu = this.field_table.GetEnumerator(); while (enu.MoveNext()) { FieldInfo field = (FieldInfo)enu.Current; if (field.IsLiteral && field is JSMemberField) { Object val = null; if ((val = ((JSMemberField)field).value) is FunctionObject) { if (((FunctionObject)val).isConstructor) { continue; //Suppress constructors, they are awkward to handle. The compiler always obtains them via GetConstructor } ((JSMemberField)field).AddOverloadedMembers(mems, this, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly); } else if (val is JSProperty) { mems.Add((MemberInfo)val); } else { mems.Add(field); } } else { mems.Add(field); } } if (this.parent != null) //Add any members found on the prototype { mems.AddRange(this.parent.GetMembers(bindingAttr)); } return(mems.ToArray()); }
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) { MemberInfoList mems = new MemberInfoList(); IEnumerator enumerator = base.field_table.GetEnumerator(); while (enumerator.MoveNext()) { FieldInfo current = (FieldInfo)enumerator.Current; if (current.IsLiteral && (current is JSMemberField)) { object obj2 = null; if ((obj2 = ((JSMemberField)current).value) is FunctionObject) { if (!((FunctionObject)obj2).isConstructor) { ((JSMemberField)current).AddOverloadedMembers(mems, this, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly); } } else if (obj2 is JSProperty) { mems.Add((MemberInfo)obj2); } else { mems.Add(current); } } else { mems.Add(current); } } if (base.parent != null) { mems.AddRange(base.parent.GetMembers(bindingAttr)); } return(mems.ToArray()); }
//Called when class is used as a base class. Need to give the same information as the type would, once this is compiled to IL. //However, bindingAttr is ignored because this method is never legitimately called by something other than the compiler. public override MemberInfo[] GetMembers(BindingFlags bindingAttr){ MemberInfoList mems = new MemberInfoList(); IEnumerator enu = this.field_table.GetEnumerator(); while (enu.MoveNext()){ FieldInfo field = (FieldInfo)enu.Current; if (field.IsLiteral && field is JSMemberField){ Object val = null; if ((val = ((JSMemberField)field).value) is FunctionObject){ if (((FunctionObject)val).isConstructor) continue; //Suppress constructors, they are awkward to handle. The compiler always obtains them via GetConstructor ((JSMemberField)field).AddOverloadedMembers(mems, this, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static|BindingFlags.DeclaredOnly); }else if (val is JSProperty){ mems.Add((MemberInfo)val); }else mems.Add(field); }else mems.Add(field); } if (this.parent != null) //Add any members found on the prototype mems.AddRange(this.parent.GetMembers(bindingAttr)); return mems.ToArray(); }
internal static MemberInfo[] GetInterfaceMembers(string name, Type t) { BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly; MemberInfo[] member = t.GetMember(name, bindingAttr); Type[] interfaces = t.GetInterfaces(); if ((interfaces == null) || (interfaces.Length == 0)) { return member; } ArrayList list = new ArrayList(interfaces); MemberInfoList list2 = new MemberInfoList(); list2.AddRange(member); for (int i = 0; i < list.Count; i++) { Type type = (Type) list[i]; member = type.GetMember(name, bindingAttr); if (member != null) { list2.AddRange(member); } foreach (Type type2 in type.GetInterfaces()) { if (list.IndexOf(type2) == -1) { list.Add(type2); } } } return list2.ToArray(); }
//Returns a list of member infos that are sorted by declaring type. Superclass members always follow derived class members. private MemberInfoList GetAllKnownInstanceBindingsForThisName(){ IReflect[] classes = this.GetAllEligibleClasses(); MemberInfoList result = new MemberInfoList(); foreach (IReflect c in classes){ if (c is ClassScope){ if (((ClassScope)c).ParentIsInSamePackage()) result.AddRange(c.GetMember(name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly)); else result.AddRange(c.GetMember(name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance)); }else result.AddRange(c.GetMember(name, BindingFlags.Public|BindingFlags.Instance)); } return result; }
internal static MemberInfo[] GetInterfaceMembers(String name, Type t){ BindingFlags flags = BindingFlags.Public|BindingFlags.Instance|BindingFlags.Static|BindingFlags.DeclaredOnly; MemberInfo[] members = t.GetMember(name, flags); Type[] baseInts = t.GetInterfaces(); if (baseInts == null || baseInts.Length == 0) return members; ArrayList baseInterfaces = new ArrayList(baseInts); MemberInfoList result = new MemberInfoList(); result.AddRange(members); for (int i = 0; i < baseInterfaces.Count; i++){ Type bi = (Type)baseInterfaces[i]; members = bi.GetMember(name, flags); if (members != null) result.AddRange(members); foreach (Type bbi in bi.GetInterfaces()){ if (baseInterfaces.IndexOf(bbi) == -1) baseInterfaces.Add(bbi); } } return result.ToArray(); }
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) { MemberInfoList mems = new MemberInfoList(); IEnumerator enumerator = base.field_table.GetEnumerator(); while (enumerator.MoveNext()) { FieldInfo current = (FieldInfo) enumerator.Current; if (current.IsLiteral && (current is JSMemberField)) { object obj2 = null; if ((obj2 = ((JSMemberField) current).value) is FunctionObject) { if (!((FunctionObject) obj2).isConstructor) { ((JSMemberField) current).AddOverloadedMembers(mems, this, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly); } } else if (obj2 is JSProperty) { mems.Add((MemberInfo) obj2); } else { mems.Add(current); } } else { mems.Add(current); } } if (base.parent != null) { mems.AddRange(base.parent.GetMembers(bindingAttr)); } return mems.ToArray(); }