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. 26
      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

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

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

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

@ -27,6 +27,10 @@ namespace Debugger @@ -27,6 +27,10 @@ namespace Debugger
/// Return members which are not public
NonPublic = 8,
/// 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 @@ -29,15 +29,24 @@ namespace Debugger
{
List<T> filtered = new List<T>();
foreach(T memberInfo in input) {
if (memberInfo.IsStatic && ((bindingFlags & BindingFlags.Static) != 0) ||
!memberInfo.IsStatic && ((bindingFlags & BindingFlags.Instance) != 0)) {
if (memberInfo.IsPrivate && ((bindingFlags & BindingFlags.NonPublic) != 0) ||
memberInfo.IsPublic && ((bindingFlags & BindingFlags.Public) != 0)) {
filtered.Add(memberInfo);
// 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
}
}
// 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();
}

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

@ -405,7 +405,7 @@ namespace Debugger @@ -405,7 +405,7 @@ namespace Debugger
/// <summary> Return all public fields.</summary>
public IList<FieldInfo> GetFields()
{
return GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
return GetFields(BindingFlags.Public);
}
/// <summary> Return all fields satisfing binding flags.</summary>
@ -417,7 +417,7 @@ namespace Debugger @@ -417,7 +417,7 @@ namespace Debugger
/// <summary> Return all public methods.</summary>
public IList<MethodInfo> GetMethods()
{
return GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
return GetMethods(BindingFlags.Public);
}
/// <summary> Return all methods satisfing binding flags.</summary>
@ -429,7 +429,7 @@ namespace Debugger @@ -429,7 +429,7 @@ namespace Debugger
/// <summary> Return all public properties.</summary>
public IList<PropertyInfo> GetProperties()
{
return GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
return GetProperties(BindingFlags.Public);
}
/// <summary> Return all properties satisfing binding flags.</summary>
@ -447,7 +447,7 @@ namespace Debugger @@ -447,7 +447,7 @@ namespace Debugger
/// <summary> Return all public members.</summary>
public IList<MemberInfo> GetMembers()
{
return GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
return GetMembers(BindingFlags.Public);
}
/// <summary> Return all members satisfing binding flags.</summary>
@ -456,6 +456,12 @@ namespace Debugger @@ -456,6 +456,12 @@ namespace Debugger
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>
public override bool Equals(object obj)
{

Loading…
Cancel
Save