Browse Source

Better comments.

pull/15/head
mkonicek 15 years ago
parent
commit
a0f2391f24
  1. 10
      src/AddIns/Debugger/Debugger.AddIn/TreeModel/ChildNodesOfObject.cs
  2. 85
      src/AddIns/Debugger/Debugger.AddIn/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
  3. 11
      src/AddIns/Debugger/Debugger.AddIn/Visualizers/GridVisualizer/ObjectValue.cs

10
src/AddIns/Debugger/Debugger.AddIn/TreeModel/ChildNodesOfObject.cs

@ -98,7 +98,9 @@ namespace Debugger.AddIn.TreeModel @@ -98,7 +98,9 @@ namespace Debugger.AddIn.TreeModel
public static IEnumerable<TreeNode> LazyGetItemsOfIList(Expression targetObject)
{
// This is needed for expanding IEnumerable<T>
// Add a cast, so that we are sure the expression has an indexer.
// (The expression can be e.g. of type 'object' but its value is a List.
// Without the cast, evaluating "expr[i]" would fail, because object does not have an indexer).
targetObject = new CastExpression(
new TypeReference(typeof(IList).FullName),
targetObject,
@ -120,9 +122,9 @@ namespace Debugger.AddIn.TreeModel @@ -120,9 +122,9 @@ namespace Debugger.AddIn.TreeModel
for(int i = 0; i < count; i++) {
string imageName;
var image = ExpressionNode.GetImageForArrayIndexer(out imageName);
var expression = new ExpressionNode(image, "[" + i + "]", targetObject.AppendIndexer(i));
expression.ImageName = imageName;
yield return expression;
var itemNode = new ExpressionNode(image, "[" + i + "]", targetObject.AppendIndexer(i));
itemNode.ImageName = imageName;
yield return itemNode;
}
}
}

85
src/AddIns/Debugger/Debugger.AddIn/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs

@ -105,54 +105,61 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -105,54 +105,61 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
public void Refresh()
{
// clear ListView
listView.ItemsSource = null;
ScrollViewer listViewScroller = listView.GetScrollViewer();
if (listViewScroller != null) {
listViewScroller.ScrollToVerticalOffset(0);
}
Value shownValue = null;
ICSharpCode.NRefactory.Ast.Expression shownExpr = null;
try {
shownExpr = debuggerService.GetExpression(txtExpression.Text);
shownValue = shownExpr.Evaluate(debuggerService.DebuggedProcess);
} catch(GetValueException) {
// display ex.Message
}
if (shownValue != null && !shownValue.IsNull) {
GridValuesProvider gridValuesProvider;
// Value is IList
DebugType iListType, listItemType;
if (shownValue.Type.ResolveIListImplementation(out iListType, out listItemType)) {
gridValuesProvider = CreateListValuesProvider(shownExpr, iListType, listItemType);
} else {
// Value is IEnumerable
DebugType iEnumerableType, itemType;
if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) {
// original
/*var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, initialIEnumerableItemsCount);
try {
// clear ListView
listView.ItemsSource = null;
ScrollViewer listViewScroller = listView.GetScrollViewer();
if (listViewScroller != null) {
listViewScroller.ScrollToVerticalOffset(0);
}
Value shownValue = null;
ICSharpCode.NRefactory.Ast.Expression shownExpr = null;
try {
shownExpr = debuggerService.GetExpression(txtExpression.Text);
shownValue = shownExpr.Evaluate(debuggerService.DebuggedProcess);
} catch(GetValueException) {
// display ex.Message
}
if (shownValue != null && !shownValue.IsNull) {
GridValuesProvider gridValuesProvider;
// Value is IList
DebugType iListType, listItemType;
if (shownValue.Type.ResolveIListImplementation(out iListType, out listItemType)) {
gridValuesProvider = CreateListValuesProvider(shownValue, iListType, listItemType);
} else {
// Value is IEnumerable
DebugType iEnumerableType, itemType;
if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) {
// original
/*var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, initialIEnumerableItemsCount);
var enumerableValuesProvider = new EnumerableValuesProvider(val.ExpressionTree, iEnumerableType, itemType);
lazyListViewWrapper.ItemsSource = new VirtualizingIEnumerable<ObjectValue>(enumerableValuesProvider.ItemsSource);
gridValuesProvider = enumerableValuesProvider;*/
DebugType debugListType;
var debugListExpression = DebuggerHelpers.CreateDebugListExpression(shownExpr, itemType, out debugListType);
gridValuesProvider = CreateListValuesProvider(debugListExpression, debugListType, itemType);
} else {
// Value cannot be displayed in GridVisualizer
return;
DebugType debugListType;
var debugListExpression = DebuggerHelpers.CreateDebugListExpression(shownExpr, itemType, out debugListType);
var debugList = debugListExpression.Evaluate(WindowsDebugger.CurrentProcess);
gridValuesProvider = CreateListValuesProvider(debugList, debugListType, itemType);
} else {
// Value cannot be displayed in GridVisualizer
return;
}
}
}
IList<MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers();
InitializeColumns((GridView)this.listView.View, itemTypeMembers);
this.columnHider = new GridViewColumnHider((GridView)this.listView.View);
cmbColumns.ItemsSource = this.columnHider.HideableColumns;
IList<MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers();
InitializeColumns((GridView)this.listView.View, itemTypeMembers);
this.columnHider = new GridViewColumnHider((GridView)this.listView.View);
cmbColumns.ItemsSource = this.columnHider.HideableColumns;
}
} catch (GetValueException ex) {
// TODO display ex msg
} catch (DebuggerVisualizerException ex) {
// TODO display ex msg
}
}
ListValuesProvider CreateListValuesProvider(ICSharpCode.NRefactory.Ast.Expression targetObject, DebugType iListType, DebugType listItemType)
ListValuesProvider CreateListValuesProvider(Value targetValue, DebugType iListType, DebugType listItemType)
{
var listValuesProvider = new ListValuesProvider(targetObject, iListType, listItemType);
var listValuesProvider = new ListValuesProvider(targetValue, listItemType);
var virtCollection = new VirtualizingCollection<ObjectValue>(listValuesProvider);
this.listView.ItemsSource = virtCollection;
return listValuesProvider;

11
src/AddIns/Debugger/Debugger.AddIn/Visualizers/GridVisualizer/ObjectValue.cs

@ -16,14 +16,10 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -16,14 +16,10 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
/// </summary>
public class ObjectValue
{
private int index;
/// <summary> Index of this item in the collection. </summary>
public int Index {
get { return index; }
}
public int Index { get; private set; }
// PermanentReference to one row. Even if we used expressions, they are cached using PermanentReferences, so
// one PermanentReference for a row would be created anyway
// PermanentReference for one row.
public Value PermanentReference { get; private set; }
private Dictionary<string, ObjectProperty> properties = new Dictionary<string, ObjectProperty>();
@ -33,7 +29,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -33,7 +29,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
internal ObjectValue(int index, Dictionary<string, MemberInfo> memberFromNameMap)
{
this.index = index;
this.Index = index;
this.memberForNameMap = memberFromNameMap;
}
@ -60,7 +56,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -60,7 +56,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
}
return property;
}
//set { properties[key] = value; }
}
public static ObjectValue Create(Debugger.Value value, int index, Dictionary<string, MemberInfo> memberFromName)

Loading…
Cancel
Save