protected void GenProperties() { Type type = _bindType.type; //props var propList = type.GetProperties(BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.DeclaredOnly); var propFilter = new GeneralFilter <PropertyInfo>(propList) .Exclude(new BlackListMemberNameFilter <PropertyInfo>()) .Exclude(new ObsoleteFilter <PropertyInfo>()); propFilter.Each(GenProperty); //fields var fields = type.GetFields(BindingFlags.GetField | BindingFlags.SetField | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static); var fieldFilter = new GeneralFilter <FieldInfo>(fields) .Exclude(new BlackListMemberNameFilter <FieldInfo>()) .Exclude(new ObsoleteFilter <FieldInfo>()); fieldFilter.Each(GenField); //events var events = type.GetEvents(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static); var evtFilter = new GeneralFilter <EventInfo>(events) .Exclude(new BlackListMemberNameFilter <EventInfo>()) .Exclude(new ObsoleteFilter <EventInfo>()); evtFilter.Each(GenEvent); }
protected void GenMethods() { var flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.DeclaredOnly; Dictionary <string, MethodDataSet> allMethods = new Dictionary <string, MethodDataSet>(); Action <MethodInfo, bool> methodCollector = (mi, isExtend) => { MethodDataSet set; if (allMethods.TryGetValue(mi.Name, out set)) { set.Add(mi, isExtend); } else { set = new MethodDataSet(); set.Add(mi, isExtend); allMethods.Add(mi.Name, set); } }; //extend if (_bindType.extendList != null) { foreach (var type in _bindType.extendList) { MethodInfo[] methodInfos = type.GetMethods(flags); var extFilter = new GeneralFilter <MethodInfo>(methodInfos) .Exclude(methodExcludeFilter) .And(new ExtendMethodFilter(_bindType.type)); extFilter.Each(mi => { methodCollector(mi, true); }); } } //base var methods = _bindType.type.GetMethods(flags); var filter = new GeneralFilter <MethodInfo>(methods); var methodFilter = filter.Exclude(methodExcludeFilter); methodFilter.Each(mi => { methodCollector(mi, false); }); foreach (var pair in allMethods) { GenMethod(pair.Key, pair.Value); } }