Browse Source

Private/static variables separated in debugger tooltips

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@888 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
3a723b7a39
  1. 6
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DebuggerIcons.cs
  2. 65
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs
  3. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  4. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
  5. 12
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/MetaData/FieldProps.cs
  6. 12
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/MetaData/MethodProps.cs
  7. 36
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ClassVariable.cs
  8. 26
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs
  9. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs
  10. 7
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs
  11. 7
      src/Main/Base/Project/Src/Gui/TreeGrid/CollectionWithEvents.cs
  12. 2
      src/Main/Base/Project/Src/Services/Debugger/DebuggerGridControl.cs

6
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DebuggerIcons.cs

@ -41,10 +41,10 @@ namespace Debugger @@ -41,10 +41,10 @@ namespace Debugger
public static int GetImageListIndex(Variable variable)
{
if (variable.Value is ObjectValue) {
return 0; // Class
} else if (variable is PropertyVariable){
if (variable is PropertyVariable){
return 2; // Property
} else if (variable.Value is ObjectValue) {
return 0; // Class
} else {
return 1; // Field
}

65
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Debugger;
@ -46,6 +47,8 @@ namespace ICSharpCode.SharpDevelop.Services @@ -46,6 +47,8 @@ namespace ICSharpCode.SharpDevelop.Services
this.variable = variable;
this.variable.ValueChanged += delegate { Update(); };
DebuggerGridControl.AddColumns(this.ChildColumns);
this[1].Paint += OnIconPaint;
this[3].FinishLabelEdit += OnLabelEdited;
if (variable.Value is PrimitiveValue && variable.Value.ManagedType != typeof(string)) {
@ -92,12 +95,66 @@ namespace ICSharpCode.SharpDevelop.Services @@ -92,12 +95,66 @@ namespace ICSharpCode.SharpDevelop.Services
/// </summary>
protected override void OnExpanding(DynamicListEventArgs e)
{
this.ChildRows.Clear();
List<Variable> publicStatic = new List<Variable>();
List<Variable> publicInstance = new List<Variable>();
List<Variable> privateStatic = new List<Variable>();
List<Variable> privateInstance = new List<Variable>();
foreach(Variable variable in this.Variable.SubVariables) {
DynamicTreeDebuggerRow newRow = new DynamicTreeDebuggerRow(variable);
DebuggerGridControl.AddColumns(newRow.ChildColumns);
this.ChildRows.Add(newRow);
ClassVariable classVariable = variable as ClassVariable;
if (classVariable == null) {
publicInstance.Add(variable);
} else {
if (classVariable.IsPublic) {
if (classVariable.IsStatic) {
publicStatic.Add(variable);
} else {
publicInstance.Add(variable);
}
} else {
if (classVariable.IsStatic) {
privateStatic.Add(variable);
} else {
privateInstance.Add(variable);
}
}
}
}
this.ChildRows.Clear();
// Private Members
if (privateInstance.Count > 0) {
this.ChildRows.Add(MakeSubMenu("Private Members",
RowsFromVariables(privateInstance)));
}
// Static Members
if (publicStatic.Count > 0 || privateStatic.Count > 0) {
DynamicTreeRow privateStaticSubMenu = MakeSubMenu("Private Static Members",
RowsFromVariables(privateStatic));
this.ChildRows.Add(MakeSubMenu("Static Members",
privateStatic.Count > 0 ? new DynamicListRow[]{privateStaticSubMenu} : new DynamicListRow[]{},
RowsFromVariables(publicStatic)));
}
// Public Members
this.ChildRows.AddRange(RowsFromVariables(publicInstance));
}
IEnumerable<DynamicListRow> RowsFromVariables(IEnumerable<Variable> variables)
{
foreach(Variable variable in variables) {
yield return new DynamicTreeDebuggerRow(variable);
}
}
DynamicTreeRow MakeSubMenu(string name, params IEnumerable<DynamicListRow>[] elements)
{
DynamicTreeRow rootRow = new DynamicTreeRow();
DebuggerGridControl.AddColumns(rootRow.ChildColumns);
rootRow[2].Text = name;
foreach(IEnumerable<DynamicListRow> rows in elements) {
rootRow.ChildRows.AddRange(rows);
}
return rootRow;
}
}
}

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -237,8 +237,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -237,8 +237,7 @@ namespace ICSharpCode.SharpDevelop.Services
if (variable == null) {
return null;
} else {
DynamicTreeDebuggerRow newRow = new DynamicTreeDebuggerRow(variable);
return new DebuggerGridControl(newRow);
return new DebuggerGridControl(new DynamicTreeDebuggerRow(variable));
}
}

1
src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj

@ -207,6 +207,7 @@ @@ -207,6 +207,7 @@
<Compile Include="Src\Variables\VariableCollectionEventArgs.cs" />
<Compile Include="Src\Threads\Stepper.cs" />
<Compile Include="Src\Threads\StepperEventArgs.cs" />
<Compile Include="Src\Variables\ClassVariable.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="README.TXT" />

12
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/MetaData/FieldProps.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
@ -17,13 +17,19 @@ namespace Debugger @@ -17,13 +17,19 @@ namespace Debugger
public string Name;
public uint ClassToken;
public uint Flags;
public bool IsStatic {
get {
return (Flags & (uint)ClassFieldAttribute.fdStatic) != 0;
}
}
public bool IsPublic {
get {
return (Flags & (uint)ClassFieldAttribute.fdPublic) != 0;
}
}
public bool IsLiteral {
get {
return (Flags & (uint)ClassFieldAttribute.fdLiteral) != 0;

12
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/MetaData/MethodProps.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
@ -20,13 +20,19 @@ namespace Debugger @@ -20,13 +20,19 @@ namespace Debugger
public uint ImplFlags;
public uint CodeRVA;
public SignatureStream Signature;
public bool IsStatic {
get {
return (Flags & (uint)CorMethodAttr.mdStatic) != 0;
}
}
public bool IsPublic {
get {
return (Flags & (uint)CorMethodAttr.mdPublic) != 0;
}
}
public bool HasSpecialName {
get {
return (Flags & (uint)CorMethodAttr.mdSpecialName) != 0;

36
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ClassVariable.cs

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
namespace Debugger
{
public class ClassVariable: Variable
{
bool isStatic;
bool isPublic;
public bool IsStatic {
get {
return isStatic;
}
}
public bool IsPublic {
get {
return isPublic;
}
}
public ClassVariable(NDebugger debugger, string name, bool isStatic, bool isPublic, ValueGetter valueGetter): base(debugger, name, valueGetter)
{
this.isStatic = isStatic;
this.isPublic = isPublic;
}
}
}

26
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs

@ -148,17 +148,19 @@ namespace Debugger @@ -148,17 +148,19 @@ namespace Debugger
FieldProps field = f; // One per scope/delegate
if (field.IsStatic && field.IsLiteral) continue; // Skip field
if (!field.IsStatic && corValue == null) continue; // Skip field
yield return new Variable(debugger,
field.Name,
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return GetValue(updatedVal, field);
} else {
return new UnavailableValue(debugger, "Object type changed");
}
});
yield return new ClassVariable(debugger,
field.Name,
field.IsStatic,
field.IsPublic,
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return GetValue(updatedVal, field);
} else {
return new UnavailableValue(debugger, "Object type changed");
}
});
}
}
@ -169,6 +171,8 @@ namespace Debugger @@ -169,6 +171,8 @@ namespace Debugger
if (method.Name.StartsWith("get_") && method.HasSpecialName) {
yield return new PropertyVariable(debugger,
method.Name.Remove(0, 4),
method.IsStatic,
method.IsPublic,
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return null;

4
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs

@ -16,12 +16,12 @@ namespace Debugger @@ -16,12 +16,12 @@ namespace Debugger
/// </summary>
public delegate Eval EvalCreator();
public class PropertyVariable: Variable
public class PropertyVariable: ClassVariable
{
EvalCreator evalCreator;
Eval cachedEval;
internal PropertyVariable(NDebugger debugger, string name, EvalCreator evalCreator):base(debugger, name, null)
internal PropertyVariable(NDebugger debugger, string name, bool isStatic, bool isPublic, EvalCreator evalCreator):base(debugger, name, isStatic, isPublic, null)
{
this.evalCreator = evalCreator;
this.valueGetter = delegate {

7
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -417,9 +417,12 @@ namespace Debugger.Tests @@ -417,9 +417,12 @@ namespace Debugger.Tests
Assert.AreEqual("privateField", subVars[1].Name);
Assert.AreEqual("publicFiled", subVars[2].Name);
Assert.AreEqual("PublicProperty", subVars[3].Name);
Assert.AreEqual(typeof(Variable), subVars[1].GetType());
Assert.AreEqual(typeof(Variable), subVars[2].GetType());
Assert.AreEqual(typeof(ClassVariable), subVars[1].GetType());
Assert.AreEqual(typeof(ClassVariable), subVars[2].GetType());
Assert.AreEqual(typeof(PropertyVariable), subVars[3].GetType());
Assert.AreEqual(false, ((ClassVariable)subVars[1]).IsPublic);
Assert.AreEqual(true, ((ClassVariable)subVars[2]).IsPublic);
Assert.AreEqual(true, ((ClassVariable)subVars[3]).IsPublic);
Assert.AreEqual(true, ((ObjectValue)local.Value).HasBaseClass);
baseClass = subVars[0];
Assert.AreEqual(typeof(ObjectValue), baseClass.Value.GetType());

7
src/Main/Base/Project/Src/Gui/TreeGrid/CollectionWithEvents.cs

@ -98,6 +98,13 @@ namespace ICSharpCode.SharpDevelop.Gui.TreeGrid @@ -98,6 +98,13 @@ namespace ICSharpCode.SharpDevelop.Gui.TreeGrid
OnAdded(item);
}
public void AddRange(IEnumerable<T> range)
{
foreach(T t in range) {
Add(t);
}
}
public void Clear()
{
List<T> oldList = list;

2
src/Main/Base/Project/Src/Services/Debugger/DebuggerGridControl.cs

@ -57,8 +57,6 @@ namespace ICSharpCode.Core @@ -57,8 +57,6 @@ namespace ICSharpCode.Core
Rows.Add(row);
AddColumns(row.ChildColumns);
row.Expanded += delegate { isExpanded = true; };
row.Collapsed += delegate { isExpanded = false; };

Loading…
Cancel
Save