Browse Source

Fixed Base classes in Local Variables pad

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@401 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
184294d145
  1. 33
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BaseClassItem.cs
  2. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
  3. 15
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/VariableItem.cs
  4. 11
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectVariable.cs

33
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BaseClassItem.cs

@ -12,21 +12,16 @@ using DebuggerLibrary;
namespace ICSharpCode.SharpDevelop.Gui.Pads namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
class BaseClassItem: VariableListItem class BaseClassItem: VariableItem
{ {
ObjectVariable variable; public BaseClassItem(Variable uncastedVariable)
public override bool IsValid {
get {
return variable != null &&
variable.HasBaseClass &&
variable.BaseClass.Type != "System.Object";
}
}
public BaseClassItem(Variable baseClassOfVariable): base()
{ {
this.variable = baseClassOfVariable as ObjectVariable; ObjectVariable variable = uncastedVariable as ObjectVariable;
if (variable != null && variable.HasBaseClass && variable.BaseClass.Type != "System.Object") {
this.Variable = variable.BaseClass;
} else {
this.Variable = null;
}
Refresh(); Refresh();
} }
@ -37,13 +32,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
} }
SetTexts("<Base class>", SetTexts("<Base class>",
variable.BaseClass.Value.ToString(), Variable.Value.ToString(),
variable.BaseClass.Type); Variable.Type);
ImageIndex = 0; // Class ImageIndex = 0; // Class
if (variable.BaseClass.MayHaveSubVariables) { // Always true if (IsExpanded) {
Items.Add(new PlaceHolderItem()); // Show plus icon UpdateSubVariables();
} else {
if (Variable.MayHaveSubVariables) { // Always true
Items.Add(new PlaceHolderItem()); // Show plus icon
}
} }
} }
} }

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs

@ -156,7 +156,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
} }
VariableItem variableItem = item as VariableItem; VariableItem variableItem = item as VariableItem;
if (variableItem != null && !variables.Contains(variableItem.Variable.Name)) { if (variableItem != null && !(item is BaseClassItem) && !variables.Contains(variableItem.Variable.Name)) {
toBeRemoved.Add(item); toBeRemoved.Add(item);
} }
} }

15
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/VariableItem.cs

@ -34,6 +34,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
} }
} }
protected VariableItem()
{
}
public VariableItem(Variable variable): base() public VariableItem(Variable variable): base()
{ {
this.variable = variable; this.variable = variable;
@ -63,16 +68,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
ImageIndex = 1; // Field ImageIndex = 1; // Field
} }
if (variable.MayHaveSubVariables && !IsExpanded) {
Items.Add(new PlaceHolderItem()); // Show plus icon
}
if (IsExpanded) { if (IsExpanded) {
UpdateSubVariables(); UpdateSubVariables();
} else {
if (variable.MayHaveSubVariables) {
Items.Add(new PlaceHolderItem()); // Show plus icon
}
} }
} }
void UpdateSubVariables() { protected void UpdateSubVariables() {
if (!baseClassItemAdded) { if (!baseClassItemAdded) {
VariableListItem baseClassItem = new BaseClassItem(variable); VariableListItem baseClassItem = new BaseClassItem(variable);
if (baseClassItem.IsValid) { if (baseClassItem.IsValid) {

11
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectVariable.cs

@ -101,7 +101,13 @@ namespace DebuggerLibrary
public bool HasBaseClass { public bool HasBaseClass {
get { get {
if (baseClass == null) baseClass = GetBaseClass(); if (baseClass == null) {
try {
baseClass = GetBaseClass();
} catch (DebuggerException) {
baseClass = null;
}
}
return (baseClass != null); return (baseClass != null);
} }
} }
@ -129,12 +135,11 @@ namespace DebuggerLibrary
corModuleSuperclass = m.CorModule; corModuleSuperclass = m.CorModule;
break; break;
} }
if (classProps.SuperClassToken == 0) throw new DebuggerException("Unable to get base class: " + fullTypeName);
} }
// If it has no base class // If it has no base class
if ((classProps.SuperClassToken & 0x00FFFFFF) == 0) { if ((classProps.SuperClassToken & 0x00FFFFFF) == 0) {
return null; throw new DebuggerException("Unable to get base class: " + fullTypeName);
} else { } else {
ICorDebugClass superClass; ICorDebugClass superClass;
corModuleSuperclass.GetClassFromToken(classProps.SuperClassToken, out superClass); corModuleSuperclass.GetClassFromToken(classProps.SuperClassToken, out superClass);

Loading…
Cancel
Save