From a17b7f9912565822e94091ec54e5ebffbee5e4ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Fri, 18 Jan 2008 00:20:47 +0000 Subject: [PATCH] Fix: Do not show "Private members" if it is empty. Same for others. Show only get properties - no indexers and setters. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2866 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/TreeModel/ChildNodesOfObject.cs | 23 ++++++---- .../Project/Src/Metadata/BindingFlags.cs | 30 ++++++------- .../Project/Src/Metadata/DebugType-Helpers.cs | 42 +++++++++++++------ 3 files changed, 62 insertions(+), 33 deletions(-) diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs index edc537e983..7ee5b67d05 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs @@ -19,16 +19,19 @@ namespace Debugger.AddIn.TreeModel { public static IEnumerable GetChildNodesOfObject(Expression targetObject, DebugType shownType) { + BindingFlags Flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Field | BindingFlags.GetProperty; if (shownType.BaseType != null) { yield return new BaseClassNode(targetObject, shownType.BaseType); } - if (shownType.HasMembers(BindingFlags.NonPublicInstance)) { + if (shownType.HasMembers(NonPublicInstanceMembersNode.Flags)) { yield return new NonPublicInstanceMembersNode(targetObject, shownType); } - if (shownType.HasMembers(BindingFlags.Static)) { + if (shownType.HasMembers(StaticMembersNode.Flags) || + shownType.HasMembers(NonPublicStaticMembersNode.Flags)) + { yield return new StaticMembersNode(targetObject, shownType); } - foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, BindingFlags.PublicInstance)) { + foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { yield return Util.CreateNode(childExpr); } } @@ -53,6 +56,8 @@ namespace Debugger.AddIn.TreeModel public class NonPublicInstanceMembersNode: AbstractNode { + public static BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Field | BindingFlags.GetProperty; + Expression targetObject; DebugType shownType; @@ -67,7 +72,7 @@ namespace Debugger.AddIn.TreeModel IEnumerable GetChildNodes() { - foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, BindingFlags.NonPublicInstance)) { + foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { yield return Util.CreateNode(childExpr); } } @@ -75,6 +80,8 @@ namespace Debugger.AddIn.TreeModel public class StaticMembersNode: AbstractNode { + public static BindingFlags Flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.Field | BindingFlags.GetProperty; + Expression targetObject; DebugType shownType; @@ -89,10 +96,10 @@ namespace Debugger.AddIn.TreeModel IEnumerable GetChildNodes() { - if (shownType.HasMembers(BindingFlags.NonPublicStatic)) { + if (shownType.HasMembers(NonPublicStaticMembersNode.Flags)) { yield return new NonPublicStaticMembersNode(targetObject, shownType); } - foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, BindingFlags.PublicStatic)) { + foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { yield return Util.CreateNode(childExpr); } } @@ -100,6 +107,8 @@ namespace Debugger.AddIn.TreeModel public class NonPublicStaticMembersNode: AbstractNode { + public static BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Field | BindingFlags.GetProperty; + Expression targetObject; DebugType shownType; @@ -114,7 +123,7 @@ namespace Debugger.AddIn.TreeModel IEnumerable GetChildNodes() { - foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, BindingFlags.NonPublicStatic)) { + foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { yield return Util.CreateNode(childExpr); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/BindingFlags.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/BindingFlags.cs index d7aa988e79..832718aeda 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/BindingFlags.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/BindingFlags.cs @@ -17,20 +17,22 @@ namespace Debugger /// Use 'or' operation to combine flags. /// [Flags] - public enum BindingFlags { - /// Return instance (ie non-static members) members - Instance = 1, - /// Return static members - Static = 2, - /// Return public members - Public = 4, - /// Return members which are not public - NonPublic = 8, + public enum BindingFlags: uint { /// Return all members - All = Instance | Static | Public | NonPublic, - PublicInstance = Public | Instance, - PublicStatic = Public | Static, - NonPublicInstance = NonPublic | Instance, - NonPublicStatic = NonPublic | Static + All = 0xFFFF, + + AccessMask = 0x0F, + Public = 0x01, + NonPublic = 0x02, + + InstanceStaticMask = 0xF0, + Instance = 0x10, + Static = 0x20, + + TypeMask = 0x0F00, + Field = 0x0100, + Property = 0x0200, + Method = 0x0400, + GetProperty = 0x0800 }; } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs index 2e94a67c9e..2234762748 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs @@ -87,31 +87,49 @@ namespace Debugger foreach(MemberInfo memberInfo in members) { // Filter by type if (!(memberInfo is T)) continue; // Reject item + // Filter by access - if ((bindingFlags & (BindingFlags.Public | BindingFlags.NonPublic)) != 0) { - if (memberInfo.IsPublic) { - // If we do not want public members - if ((bindingFlags & BindingFlags.Public) == 0) continue; // Reject item - } else { - if ((bindingFlags & BindingFlags.NonPublic) == 0) continue; // Reject item - } + if ((bindingFlags & BindingFlags.AccessMask) != 0) { + bool accept = false; + if ((bindingFlags & BindingFlags.Public) != 0 && memberInfo.IsPublic) accept = true; + if ((bindingFlags & BindingFlags.NonPublic) != 0 && !memberInfo.IsPublic) accept = true; + if (!accept) continue; // Reject item } + // Filter by static / instance - if ((bindingFlags & (BindingFlags.Static | BindingFlags.Instance)) != 0) { - if (memberInfo.IsStatic) { - if ((bindingFlags & BindingFlags.Static) == 0) continue; // Reject item - } else { - if ((bindingFlags & BindingFlags.Instance) == 0) continue; // Reject item + if ((bindingFlags & BindingFlags.InstanceStaticMask) != 0) { + bool accept = false; + if ((bindingFlags & BindingFlags.Static) != 0 && memberInfo.IsStatic) accept = true; + if ((bindingFlags & BindingFlags.Instance) != 0 && !memberInfo.IsStatic) accept = true; + if (!accept) continue; // Reject item + } + + // Filter by type + if ((bindingFlags & BindingFlags.TypeMask) != 0) { + bool accept = false; + if ((bindingFlags & BindingFlags.Field) != 0 && memberInfo is FieldInfo) accept = true; + if ((bindingFlags & BindingFlags.Property) != 0 && memberInfo is PropertyInfo) accept = true; + if ((bindingFlags & BindingFlags.Method) != 0 && memberInfo is MethodInfo) accept = true; + if ((bindingFlags & BindingFlags.GetProperty) != 0 && + memberInfo is PropertyInfo && + ((PropertyInfo)memberInfo).GetMethod != null && + ((PropertyInfo)memberInfo).GetMethod.ParameterCount == 0) + { + accept = true; } + if (!accept) continue; // Reject item } + // Filter by name if (name != null) { if (memberInfo.Name != name) continue; // Reject item } + // Filter by token if (token.HasValue) { if (memberInfo.MetadataToken != token.Value) continue; // Reject item } + results.Add((T)memberInfo); }