public override TreeViewNodeFilterResult GetFilterResult(TypeDef type) { var childrenFlags = VisibleMembersFlags.AnyTypeDef | VisibleMembersFlags.FieldDef | VisibleMembersFlags.MethodDef | VisibleMembersFlags.InstanceConstructor | VisibleMembersFlags.PropertyDef | VisibleMembersFlags.EventDef | VisibleMembersFlags.BaseTypes | VisibleMembersFlags.DerivedTypes | VisibleMembersFlags.MethodBody | VisibleMembersFlags.ParamDefs | VisibleMembersFlags.ParamDef | VisibleMembersFlags.Locals | VisibleMembersFlags.Local; var visibleFlags = VisibleMembersFlags.AnyTypeDef | childrenFlags; if ((flags & visibleFlags) == 0) return new TreeViewNodeFilterResult(FilterResult.Hidden, false); if ((flags & VisibleMembersFlags.GenericTypeDef) != 0 && type.GenericParameters.Count > 0) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.NonGenericTypeDef) != 0 && type.GenericParameters.Count == 0) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.EnumTypeDef) != 0 && type.IsEnum) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.InterfaceTypeDef) != 0 && type.IsInterface) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.ClassTypeDef) != 0 && !type.IsValueType && !type.IsInterface) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.StructTypeDef) != 0 && type.IsValueType && !type.IsEnum) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.DelegateTypeDef) != 0 && TypeTreeNode.IsDelegate(type)) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & VisibleMembersFlags.TypeDef) != 0) return new TreeViewNodeFilterResult(FilterResult.Match, true); else if ((flags & childrenFlags) == 0) return new TreeViewNodeFilterResult(FilterResult.Hidden, false); var defaultValue = new TreeViewNodeFilterResult(FilterResult.Recurse, false); if (type.HasNestedTypes) return defaultValue; if ((flags & VisibleMembersFlags.FieldDef) != 0 && type.HasFields) return defaultValue; if ((flags & VisibleMembersFlags.MethodDef) != 0 && type.HasMethods) return defaultValue; if ((flags & VisibleMembersFlags.InstanceConstructor) != 0 && HasInstanceConstructors(type)) return defaultValue; if ((flags & VisibleMembersFlags.PropertyDef) != 0 && type.HasProperties) return defaultValue; if ((flags & VisibleMembersFlags.EventDef) != 0 && type.HasEvents) return defaultValue; if ((flags & VisibleMembersFlags.BaseTypes) != 0 || (flags & VisibleMembersFlags.DerivedTypes) != 0) return defaultValue; if ((flags & VisibleMembersFlags.MethodBody) != 0 && HasMethodBodies(type)) return defaultValue; if ((flags & (VisibleMembersFlags.ParamDefs | VisibleMembersFlags.ParamDef)) != 0 && HasParamDefs(type)) return defaultValue; if ((flags & (VisibleMembersFlags.Locals | VisibleMembersFlags.Local)) != 0 && HasLocals(type)) return defaultValue; return new TreeViewNodeFilterResult(FilterResult.Hidden, false); }
public override TreeViewNodeFilterResult GetFilterResult(TypeDef type) { var childrenFlags = VisibleMembersFlags.AnyTypeDef | VisibleMembersFlags.FieldDef | VisibleMembersFlags.MethodDef | VisibleMembersFlags.InstanceConstructor | VisibleMembersFlags.PropertyDef | VisibleMembersFlags.EventDef | VisibleMembersFlags.BaseTypes | VisibleMembersFlags.DerivedTypes | VisibleMembersFlags.MethodBody | VisibleMembersFlags.ParamDefs | VisibleMembersFlags.ParamDef | VisibleMembersFlags.Locals | VisibleMembersFlags.Local; var visibleFlags = VisibleMembersFlags.AnyTypeDef | childrenFlags; if ((flags & visibleFlags) == 0) { return(new TreeViewNodeFilterResult(FilterResult.Hidden, false)); } if ((flags & VisibleMembersFlags.GenericTypeDef) != 0 && type.GenericParameters.Count > 0) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.NonGenericTypeDef) != 0 && type.GenericParameters.Count == 0) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.EnumTypeDef) != 0 && type.IsEnum) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.InterfaceTypeDef) != 0 && type.IsInterface) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.ClassTypeDef) != 0 && !type.IsValueType && !type.IsInterface) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.StructTypeDef) != 0 && type.IsValueType && !type.IsEnum) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.DelegateTypeDef) != 0 && TypeTreeNode.IsDelegate(type)) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & VisibleMembersFlags.TypeDef) != 0) { return(new TreeViewNodeFilterResult(FilterResult.Match, true)); } else if ((flags & childrenFlags) == 0) { return(new TreeViewNodeFilterResult(FilterResult.Hidden, false)); } var defaultValue = new TreeViewNodeFilterResult(FilterResult.Recurse, false); if (type.HasNestedTypes) { return(defaultValue); } if ((flags & VisibleMembersFlags.FieldDef) != 0 && type.HasFields) { return(defaultValue); } if ((flags & VisibleMembersFlags.MethodDef) != 0 && type.HasMethods) { return(defaultValue); } if ((flags & VisibleMembersFlags.InstanceConstructor) != 0 && HasInstanceConstructors(type)) { return(defaultValue); } if ((flags & VisibleMembersFlags.PropertyDef) != 0 && type.HasProperties) { return(defaultValue); } if ((flags & VisibleMembersFlags.EventDef) != 0 && type.HasEvents) { return(defaultValue); } if ((flags & VisibleMembersFlags.BaseTypes) != 0 || (flags & VisibleMembersFlags.DerivedTypes) != 0) { return(defaultValue); } if ((flags & VisibleMembersFlags.MethodBody) != 0 && HasMethodBodies(type)) { return(defaultValue); } if ((flags & (VisibleMembersFlags.ParamDefs | VisibleMembersFlags.ParamDef)) != 0 && HasParamDefs(type)) { return(defaultValue); } if ((flags & (VisibleMembersFlags.Locals | VisibleMembersFlags.Local)) != 0 && HasLocals(type)) { return(defaultValue); } return(new TreeViewNodeFilterResult(FilterResult.Hidden, false)); }