Browse Source

Make debugger visualizers compile.

newNRvisualizers
Martin Konicek 13 years ago
parent
commit
03a41676fc
  1. 21
      src/AddIns/Debugger/Debugger.AddIn/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs

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

@ -2,11 +2,13 @@ @@ -2,11 +2,13 @@
// This code is distributed under the BSD license (for details please see \src\AddIns\Debugger\Debugger.AddIn\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using Debugger.AddIn.Visualizers.PresentationBindings;
using Debugger.AddIn.Visualizers.Utils;
using Debugger.MetaData;
@ -51,7 +53,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -51,7 +53,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
// Value is IEnumerable
if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) {
shownValue = DebuggerHelpers.CreateListFromIEnumerable(shownValue);
iListType = DebugType.CreateFromType(shownValue.AppDomain, typeof(System.Collections.Generic.IList<>), itemType);
shownValue.Type.ResolveIListImplementation(out iListType, out itemType);
//var ilistDef = iEnumerableType.Compilation.FindType(typeof(List<>)).GetDefinition();
//var ilistType = new ParameterizedType(ilistDef, ienumerableType.TypeArguments);
} else {
// Not IList or IEnumerable<T> - can't be displayed in GridVisualizer
return;
@ -59,18 +63,19 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -59,18 +63,19 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
}
shownValue = shownValue.GetPermanentReference(WindowsDebugger.EvalThread);
var members = itemType.GetFieldsAndNonIndexedProperties().Where(m => m.IsPublic && !m.IsStatic);
var members = itemType.GetFieldsAndNonIndexedProperties().Where(m => m.IsPublic && !m.IsStatic).ToList();
IProperty indexerProperty = iListType.GetProperties(p => p.Name == "Item").Single();
int rowCount = (int)shownValue.GetPropertyValue(WindowsDebugger.EvalThread, iListType.GetProperties(p => p.Name == "Count").Single()).PrimitiveValue;
int columnCount = members.Length + 1;
int columnCount = members.Count + 1;
var rowCollection = new VirtualizingCollection<VirtualizingCollection<string>>(
rowCount,
(rowIndex) => new VirtualizingCollection<string>(
columnCount,
(columnIndex) => {
if (columnIndex == members.Length)
if (columnIndex == columnCount - 1) {
return "[" + rowIndex + "]";
}
try {
var rowValue = shownValue.GetPropertyValue(WindowsDebugger.EvalThread, indexerProperty, Eval.CreateValue(WindowsDebugger.EvalThread, rowIndex));
return rowValue.GetMemberValue(WindowsDebugger.EvalThread, members[columnIndex]).InvokeToString(WindowsDebugger.EvalThread);
@ -92,7 +97,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -92,7 +97,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
}
}
void InitializeColumns(GridView gridView, MemberInfo[] members)
void InitializeColumns(GridView gridView, IList<IMember> members)
{
gridView.Columns.Clear();
@ -101,15 +106,15 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -101,15 +106,15 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
indexColumn.CanBeHidden = false;
indexColumn.Width = 36;
indexColumn.Header = string.Empty;
indexColumn.DisplayMemberBinding = new Binding("[" + members.Length + "]");
indexColumn.DisplayMemberBinding = new Binding("[" + members.Count + "]");
gridView.Columns.Add(indexColumn);
// Member columns
for (int i = 0; i < members.Length; i++) {
for (int i = 0; i < members.Count; i++) {
var memberColumn = new GridViewHideableColumn();
memberColumn.CanBeHidden = true;
memberColumn.Header = members[i].Name;
memberColumn.IsVisibleDefault = ((IDebugMemberInfo)members[i]).IsPublic;
memberColumn.IsVisibleDefault = members[i].IsPublic;
memberColumn.DisplayMemberBinding = new Binding("[" + i + "]");
gridView.Columns.Add(memberColumn);
}

Loading…
Cancel
Save