Browse Source

Show 'Private members' and similar nodes only if they are not empty.

Changed the semantics of BindingFlags - if no demands are specified, it implicitly means 'all' rather then 'none'.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2798 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 18 years ago
parent
commit
54c84f9aaa
  1. 28
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs
  2. 6
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Types/BindingFlags.cs
  3. 23
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Types/DebugType-Helpers.cs
  4. 14
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Types/DebugType.cs

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

@ -21,9 +21,13 @@ namespace Debugger.AddIn.TreeModel
if (shownType.BaseType != null) { if (shownType.BaseType != null) {
yield return new BaseClassNode(expression, shownType.BaseType); yield return new BaseClassNode(expression, shownType.BaseType);
} }
yield return new PrivateMembersNode(expression, shownType); if (shownType.HasMembers(BindingFlags.NonPublicInstance)) {
yield return new StaticMembersNode(expression, shownType); yield return new NonPublicInstanceMembersNode(expression, shownType);
foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.Public | BindingFlags.Instance)) { }
if (shownType.HasMembers(BindingFlags.Static)) {
yield return new StaticMembersNode(expression, shownType);
}
foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.PublicInstance)) {
yield return new ExpressionNode(childExpr); yield return new ExpressionNode(childExpr);
} }
} }
@ -46,12 +50,12 @@ namespace Debugger.AddIn.TreeModel
} }
} }
public class PrivateMembersNode: AbstractNode public class NonPublicInstanceMembersNode: AbstractNode
{ {
Expression expression; Expression expression;
DebugType shownType; DebugType shownType;
public PrivateMembersNode(Expression expression, DebugType shownType) public NonPublicInstanceMembersNode(Expression expression, DebugType shownType)
{ {
this.expression = expression; this.expression = expression;
this.shownType = shownType; this.shownType = shownType;
@ -62,7 +66,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes() IEnumerable<AbstractNode> GetChildNodes()
{ {
foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.NonPublic | BindingFlags.Instance)) { foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.NonPublicInstance)) {
yield return new ExpressionNode(childExpr); yield return new ExpressionNode(childExpr);
} }
} }
@ -84,19 +88,21 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes() IEnumerable<AbstractNode> GetChildNodes()
{ {
yield return new PrivateStaticMembersNode(expression, shownType); if (shownType.HasMembers(BindingFlags.NonPublicStatic)) {
foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.Public | BindingFlags.Static)) { yield return new NonPublicStaticMembersNode(expression, shownType);
}
foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.PublicStatic)) {
yield return new ExpressionNode(childExpr); yield return new ExpressionNode(childExpr);
} }
} }
} }
public class PrivateStaticMembersNode: AbstractNode public class NonPublicStaticMembersNode: AbstractNode
{ {
Expression expression; Expression expression;
DebugType shownType; DebugType shownType;
public PrivateStaticMembersNode(Expression expression, DebugType shownType) public NonPublicStaticMembersNode(Expression expression, DebugType shownType)
{ {
this.expression = expression; this.expression = expression;
this.shownType = shownType; this.shownType = shownType;
@ -107,7 +113,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes() IEnumerable<AbstractNode> GetChildNodes()
{ {
foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.NonPublic | BindingFlags.Static)) { foreach(Expression childExpr in expression.AppendObjectMembers(shownType, BindingFlags.NonPublicStatic)) {
yield return new ExpressionNode(childExpr); yield return new ExpressionNode(childExpr);
} }
} }

6
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Types/BindingFlags.cs

@ -27,6 +27,10 @@ namespace Debugger
/// Return members which are not public /// Return members which are not public
NonPublic = 8, NonPublic = 8,
/// Return all members /// Return all members
All = Instance | Static | Public | NonPublic All = Instance | Static | Public | NonPublic,
PublicInstance = Public | Instance,
PublicStatic = Public | Static,
NonPublicInstance = NonPublic | Instance,
NonPublicStatic = NonPublic | Static
}; };
} }

23
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Types/DebugType-Helpers.cs

@ -29,15 +29,24 @@ namespace Debugger
{ {
List<T> filtered = new List<T>(); List<T> filtered = new List<T>();
foreach(T memberInfo in input) { foreach(T memberInfo in input) {
if (memberInfo.IsStatic && ((bindingFlags & BindingFlags.Static) != 0) || // Filter by access
!memberInfo.IsStatic && ((bindingFlags & BindingFlags.Instance) != 0)) { if ((bindingFlags & (BindingFlags.Public | BindingFlags.NonPublic)) != 0) {
if (memberInfo.IsPublic) {
if (memberInfo.IsPrivate && ((bindingFlags & BindingFlags.NonPublic) != 0) || // If we do not want public members
memberInfo.IsPublic && ((bindingFlags & BindingFlags.Public) != 0)) { if ((bindingFlags & BindingFlags.Public) == 0) continue; // Reject item
} else {
filtered.Add(memberInfo); if ((bindingFlags & BindingFlags.NonPublic) == 0) 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
} }
} }
filtered.Add(memberInfo);
} }
return filtered.AsReadOnly(); return filtered.AsReadOnly();
} }

14
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Types/DebugType.cs

@ -405,7 +405,7 @@ namespace Debugger
/// <summary> Return all public fields.</summary> /// <summary> Return all public fields.</summary>
public IList<FieldInfo> GetFields() public IList<FieldInfo> GetFields()
{ {
return GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); return GetFields(BindingFlags.Public);
} }
/// <summary> Return all fields satisfing binding flags.</summary> /// <summary> Return all fields satisfing binding flags.</summary>
@ -417,7 +417,7 @@ namespace Debugger
/// <summary> Return all public methods.</summary> /// <summary> Return all public methods.</summary>
public IList<MethodInfo> GetMethods() public IList<MethodInfo> GetMethods()
{ {
return GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); return GetMethods(BindingFlags.Public);
} }
/// <summary> Return all methods satisfing binding flags.</summary> /// <summary> Return all methods satisfing binding flags.</summary>
@ -429,7 +429,7 @@ namespace Debugger
/// <summary> Return all public properties.</summary> /// <summary> Return all public properties.</summary>
public IList<PropertyInfo> GetProperties() public IList<PropertyInfo> GetProperties()
{ {
return GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); return GetProperties(BindingFlags.Public);
} }
/// <summary> Return all properties satisfing binding flags.</summary> /// <summary> Return all properties satisfing binding flags.</summary>
@ -447,7 +447,7 @@ namespace Debugger
/// <summary> Return all public members.</summary> /// <summary> Return all public members.</summary>
public IList<MemberInfo> GetMembers() public IList<MemberInfo> GetMembers()
{ {
return GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); return GetMembers(BindingFlags.Public);
} }
/// <summary> Return all members satisfing binding flags.</summary> /// <summary> Return all members satisfing binding flags.</summary>
@ -456,6 +456,12 @@ namespace Debugger
return FilterMemberInfo(members, bindingFlags); return FilterMemberInfo(members, bindingFlags);
} }
/// <summary> Return whether the type has any members stisfing the given flags </summary>
public bool HasMembers(BindingFlags bindingFlags)
{
return (GetMembers(bindingFlags).Count > 0);
}
/// <summary> Compares two types </summary> /// <summary> Compares two types </summary>
public override bool Equals(object obj) public override bool Equals(object obj)
{ {

Loading…
Cancel
Save