Browse Source

fix Debugger: Move mouse over static event -> crash 'unknown member type'

pull/45/merge
Siegfried Pammer 12 years ago
parent
commit
1300a4bcd9
  1. 5
      src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs
  2. 12
      src/AddIns/Debugger/Debugger.Core/Value.cs

5
src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs

@ -464,7 +464,10 @@ namespace Debugger.AddIn @@ -464,7 +464,10 @@ namespace Debugger.AddIn
string Visit(MemberResolveResult result)
{
return Print(result.TargetResult) + "." + result.Member.Name;
string text = Print(result.TargetResult);
if (!string.IsNullOrWhiteSpace(text))
text += ".";
return text + result.Member.Name;
}
string Visit(OperatorResolveResult result)

12
src/AddIns/Debugger/Debugger.Core/Value.cs

@ -416,6 +416,16 @@ namespace Debugger @@ -416,6 +416,16 @@ namespace Debugger
return GetPropertyValue(evalThread, objectInstance, (IProperty)memberInfo, arguments);
} else if (memberInfo is IMethod) {
return InvokeMethod(evalThread, objectInstance, (IMethod)memberInfo, arguments);
} else if (memberInfo is IEvent) {
string name = memberInfo.Name;
IField f = memberInfo.DeclaringType.GetFields(m => m.Name == name, GetMemberOptions.None).FirstOrDefault();
if (f == null) {
name += "Event";
f = memberInfo.DeclaringType.GetFields(m => m.Name == name, GetMemberOptions.None).FirstOrDefault();
}
if (f == null)
throw new GetValueException("Cannot retrieve event value");
return GetFieldValue(evalThread, objectInstance, f);
}
throw new DebuggerException("Unknown member type: " + memberInfo.GetType());
}
@ -424,7 +434,7 @@ namespace Debugger @@ -424,7 +434,7 @@ namespace Debugger
{
Value val = GetFieldValue(evalThread, objectInstance, fieldInfo);
if (!newValue.Type.GetDefinition().IsDerivedFrom(fieldInfo.Type.GetDefinition()))
throw new GetValueException("Can not assign {0} to {1}", newValue.Type.FullName, fieldInfo.Type.FullName);
throw new GetValueException("Cannot assign {0} to {1}", newValue.Type.FullName, fieldInfo.Type.FullName);
val.SetValue(evalThread, newValue);
}

Loading…
Cancel
Save