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

Loading…
Cancel
Save