Browse Source

Show debugger tooltips for expressions like "reference.FieldName".

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@409 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
06039e9d6d
  1. 24
      src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs

24
src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs

@ -338,7 +338,7 @@ namespace ICSharpCode.Core @@ -338,7 +338,7 @@ namespace ICSharpCode.Core
} else {
// Look if it is variable
ResolveResult result = ParserService.Resolve(expressionResult, logicPos.Y + 1, logicPos.X + 1, textArea.MotherTextEditorControl.FileName, textContent);
string value = GetText(result);
string value = GetText(result, expression);
if (value != null) {
#if DEBUG
value = "expr: >" + expression + "<\n" + value;
@ -357,16 +357,16 @@ namespace ICSharpCode.Core @@ -357,16 +357,16 @@ namespace ICSharpCode.Core
}
}
static string GetText(ResolveResult result)
static string GetText(ResolveResult result, string expression)
{
if (result == null)
return null;
if (result is MixedResolveResult)
return GetText(((MixedResolveResult)result).PrimaryResult);
return GetText(((MixedResolveResult)result).PrimaryResult, expression);
IAmbience ambience = AmbienceService.CurrentAmbience;
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowAccessibility;
if (result is MemberResolveResult) {
return GetText(ambience, ((MemberResolveResult)result).ResolvedMember);
return GetMemberText(ambience, ((MemberResolveResult)result).ResolvedMember, expression);
} else if (result is LocalResolveResult) {
LocalResolveResult rr = (LocalResolveResult)result;
ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedNames
@ -391,14 +391,14 @@ namespace ICSharpCode.Core @@ -391,14 +391,14 @@ namespace ICSharpCode.Core
} else if (result is TypeResolveResult) {
IClass c = ((TypeResolveResult)result).ResolvedClass;
if (c != null)
return GetText(ambience, c);
return GetMemberText(ambience, c, expression);
else
return ambience.Convert(result.ResolvedType);
} else if (result is MethodResolveResult) {
MethodResolveResult mrr = result as MethodResolveResult;
IMethod m = mrr.GetMethodIfSingleOverload();
if (m != null)
return GetText(ambience, m);
return GetMemberText(ambience, m, expression);
else
return "Overload of " + ambience.Convert(mrr.ContainingType) + "." + mrr.Name;
} else {
@ -408,15 +408,18 @@ namespace ICSharpCode.Core @@ -408,15 +408,18 @@ namespace ICSharpCode.Core
}
}
static string GetText(IAmbience ambience, IDecoration member)
static string GetMemberText(IAmbience ambience, IDecoration member, string expression)
{
bool tryDisplayValue = false;
StringBuilder text = new StringBuilder();
if (member is IIndexer) {
text.Append(ambience.Convert(member as IIndexer));
} else if (member is IField) {
text.Append(ambience.Convert(member as IField));
tryDisplayValue = true;
} else if (member is IProperty) {
text.Append(ambience.Convert(member as IProperty));
tryDisplayValue = true;
} else if (member is IEvent) {
text.Append(ambience.Convert(member as IEvent));
} else if (member is IMethod) {
@ -427,6 +430,13 @@ namespace ICSharpCode.Core @@ -427,6 +430,13 @@ namespace ICSharpCode.Core
text.Append("unknown member ");
text.Append(member.ToString());
}
if (tryDisplayValue && currentDebugger != null) {
string currentValue = currentDebugger.GetValueAsString(expression);
if (currentValue != null) {
text.Append(" = ");
text.Append(currentValue);
}
}
string documentation = member.Documentation;
if (documentation != null && documentation.Length > 0) {
text.Append('\n');

Loading…
Cancel
Save