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
public static IEnumerable<TreeNode> LazyGetItemsOfIList(Expression targetObject) 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( targetObject = new CastExpression(
new TypeReference(typeof(IList).FullName), new TypeReference(typeof(IList).FullName),
targetObject, targetObject,
@ -120,9 +122,9 @@ namespace Debugger.AddIn.TreeModel
for(int i = 0; i < count; i++) { for(int i = 0; i < count; i++) {
string imageName; string imageName;
var image = ExpressionNode.GetImageForArrayIndexer(out imageName); var image = ExpressionNode.GetImageForArrayIndexer(out imageName);
var expression = new ExpressionNode(image, "[" + i + "]", targetObject.AppendIndexer(i)); var itemNode = new ExpressionNode(image, "[" + i + "]", targetObject.AppendIndexer(i));
expression.ImageName = imageName; itemNode.ImageName = imageName;
yield return expression; yield return itemNode;
} }
} }
} }

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

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

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

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

Loading…
Cancel
Save