Browse Source

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
shortcuts
David Srbecký 19 years ago
parent
commit
a17b7f9912
  1. 23
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs
  2. 30
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/BindingFlags.cs
  3. 42
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs

23
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs

@ -19,16 +19,19 @@ namespace Debugger.AddIn.TreeModel @@ -19,16 +19,19 @@ namespace Debugger.AddIn.TreeModel
{
public static IEnumerable<AbstractNode> 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 @@ -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 @@ -67,7 +72,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> 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 @@ -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 @@ -89,10 +96,10 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> 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 @@ -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 @@ -114,7 +123,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes()
{
foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, BindingFlags.NonPublicStatic)) {
foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) {
yield return Util.CreateNode(childExpr);
}
}

30
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/BindingFlags.cs

@ -17,20 +17,22 @@ namespace Debugger @@ -17,20 +17,22 @@ namespace Debugger
/// <para> Use 'or' operation to combine flags. </para>
/// </summary>
[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
};
}

42
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs

@ -87,31 +87,49 @@ namespace Debugger @@ -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);
}

Loading…
Cancel
Save