private void LookupAllStaticAccessors(out Dictionary <string, List <MethodInfo> > getters, out Dictionary <string, List <MethodInfo> > setters, out Dictionary <string, List <MethodInfo> > adders) { getters = new Dictionary <string, List <MethodInfo> >(); setters = new Dictionary <string, List <MethodInfo> >(); adders = new Dictionary <string, List <MethodInfo> >(); MethodInfo[] allMethods = UnderlyingType.GetMethods(AttachableProperties_BF); if (UnderlyingType.IsVisible) { LookupAllStaticAccessorsHelper(allMethods, getters, setters, adders, true); } else { LookupAllStaticAccessorsHelper(allMethods, getters, setters, adders, false); } }
public override IEnumerable <IMethod> GetMethods(IReadOnlyList <IType> typeArguments, Predicate <IMethod> filter = null, GetMemberOptions options = GetMemberOptions.None) { return(UnderlyingType.GetMethods(typeArguments, filter, options)); }
IEnumerable <XamlMember> DoLookupAllAttachableMembers() { // based on http://msdn.microsoft.com/en-us/library/ff184560.aspx var bf = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; var gl = new Dictionary <string, MethodInfo> (); var sl = new Dictionary <string, MethodInfo> (); var al = new Dictionary <string, MethodInfo> (); //var rl = new Dictionary<string,MethodInfo> (); var nl = new List <string> (); foreach (var mi in UnderlyingType.GetMethods(bf)) { string name = null; if (mi.Name.StartsWith("Get", StringComparison.Ordinal)) { if (mi.ReturnType == typeof(void)) { continue; } var args = mi.GetParameters(); if (args.Length != 1) { continue; } name = mi.Name.Substring(3); gl.Add(name, mi); } else if (mi.Name.StartsWith("Set", StringComparison.Ordinal)) { // looks like the return type is *ignored* //if (mi.ReturnType != typeof (void)) // continue; var args = mi.GetParameters(); if (args.Length != 2) { continue; } name = mi.Name.Substring(3); sl.Add(name, mi); } else if (mi.Name.EndsWith("Handler", StringComparison.Ordinal)) { var args = mi.GetParameters(); if (args.Length != 2) { continue; } if (mi.Name.StartsWith("Add", StringComparison.Ordinal)) { name = mi.Name.Substring(3, mi.Name.Length - 3 - 7); al.Add(name, mi); } /* else if (mi.Name.StartsWith ("Remove", StringComparison.Ordinal)) { * name = mi.Name.Substring (6, mi.Name.Length - 6 - 7); * rl.Add (name, mi); * }*/ } if (name != null && !nl.Contains(name)) { nl.Add(name); } } foreach (var name in nl) { MethodInfo m; var g = gl.TryGetValue(name, out m) ? m : null; var s = sl.TryGetValue(name, out m) ? m : null; if (g != null || s != null) { yield return(new XamlMember(name, g, s, SchemaContext)); } var a = al.TryGetValue(name, out m) ? m : null; //var r = rl.TryGetValue (name, out m) ? m : null; if (a != null) { yield return(new XamlMember(name, a, SchemaContext)); } } }
/*private IField MakeField(IType type, string name) * { * var f = new DefaultUnresolvedField(); * f.ReturnType = SpecialType.UnknownType; * f.Name = name; * return new TupleElementField(f, Compilation.TypeResolveContext); * }*/ public override IEnumerable <IMethod> GetMethods(Predicate <IMethod> filter = null, GetMemberOptions options = GetMemberOptions.None) { return(UnderlyingType.GetMethods(filter, options)); }