|
|
|
@ -13,6 +13,7 @@ using System.IO;
@@ -13,6 +13,7 @@ using System.IO;
|
|
|
|
|
|
|
|
|
|
using ICSharpCode.Core; |
|
|
|
|
using ICSharpCode.SharpDevelop.Gui; |
|
|
|
|
using ICSharpCode.SharpDevelop.Dom; |
|
|
|
|
using ICSharpCode.SharpDevelop.Project; |
|
|
|
|
using ICSharpCode.TextEditor.Document; |
|
|
|
|
using ICSharpCode.TextEditor; |
|
|
|
@ -290,7 +291,7 @@ namespace ICSharpCode.Core
@@ -290,7 +291,7 @@ namespace ICSharpCode.Core
|
|
|
|
|
// OnTextMessage(new TextMessageEventArgs("Got Exception\n"));
|
|
|
|
|
// StopDebugger();
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// protected override void OnProcessExited(ProcessEventArgs e)
|
|
|
|
|
// {
|
|
|
|
|
// OnTextMessage(new TextMessageEventArgs(String.Format("The program '[{1}] {0}' exited with code {2}.{3}\n",
|
|
|
|
@ -517,9 +518,6 @@ namespace ICSharpCode.Core
@@ -517,9 +518,6 @@ namespace ICSharpCode.Core
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static TextMarker variableMarker; |
|
|
|
|
static IDocument variableMarkerParent; |
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// This function shows variable values as tooltips
|
|
|
|
|
/// </summary>
|
|
|
|
@ -538,16 +536,16 @@ namespace ICSharpCode.Core
@@ -538,16 +536,16 @@ namespace ICSharpCode.Core
|
|
|
|
|
string line = doc.GetText(seg.Offset, seg.Length); |
|
|
|
|
int startIndex = 0; |
|
|
|
|
int length = 0; |
|
|
|
|
string expresion = String.Empty; |
|
|
|
|
string expression = String.Empty; |
|
|
|
|
for(int index = 0; index < seg.Length; index++) { |
|
|
|
|
char chr = line[index]; |
|
|
|
|
if ((Char.IsLetterOrDigit(chr) || chr == '_' || chr == '.') == false || // invalid character
|
|
|
|
|
(chr == '.' && logicPos.X <= index)) { // Start of sub-expresion at the right side of cursor
|
|
|
|
|
(chr == '.' && logicPos.X <= index)) { // Start of sub-expression at the right side of cursor
|
|
|
|
|
// End of expresion...
|
|
|
|
|
if ((startIndex <= logicPos.X && logicPos.X <= index) && // Correct position
|
|
|
|
|
(startIndex != index)) { // Actualy something
|
|
|
|
|
length = index - startIndex; |
|
|
|
|
expresion = line.Substring(startIndex, length); |
|
|
|
|
(startIndex != index)) { // Actually something
|
|
|
|
|
length = index - startIndex; |
|
|
|
|
expression = line.Substring(startIndex, length); |
|
|
|
|
break; |
|
|
|
|
} else { |
|
|
|
|
// Let's try next one...
|
|
|
|
@ -555,34 +553,66 @@ namespace ICSharpCode.Core
@@ -555,34 +553,66 @@ namespace ICSharpCode.Core
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//Console.WriteLine("MouseMove@" + logicPos + ":" + expresion);
|
|
|
|
|
if (variableMarker == null || variableMarker.Offset != (seg.Offset + startIndex) || variableMarker.Length != length) { |
|
|
|
|
// Needs update
|
|
|
|
|
if (variableMarker != null) { |
|
|
|
|
// Remove old marker
|
|
|
|
|
variableMarkerParent.MarkerStrategy.TextMarker.Remove(variableMarker); |
|
|
|
|
variableMarkerParent.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea)); |
|
|
|
|
variableMarkerParent.CommitUpdate(); |
|
|
|
|
variableMarkerParent = null; |
|
|
|
|
variableMarker = null; |
|
|
|
|
} |
|
|
|
|
if (expresion != String.Empty) { |
|
|
|
|
// Look if it is variable
|
|
|
|
|
try { |
|
|
|
|
string value; |
|
|
|
|
//value = selectedThread.LocalVariables[expresion].Value.ToString();
|
|
|
|
|
value = expresion; |
|
|
|
|
variableMarker = new TextMarker(seg.Offset + startIndex, length, TextMarkerType.Underlined, Color.Blue); |
|
|
|
|
variableMarker.ToolTip = value; |
|
|
|
|
variableMarkerParent = doc; |
|
|
|
|
variableMarkerParent.MarkerStrategy.TextMarker.Add(variableMarker); |
|
|
|
|
variableMarkerParent.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea)); |
|
|
|
|
variableMarkerParent.CommitUpdate(); |
|
|
|
|
} catch {} |
|
|
|
|
//Console.WriteLine("MouseMove@" + logicPos + ":" + expression);
|
|
|
|
|
if (expression != String.Empty) { |
|
|
|
|
// Look if it is variable
|
|
|
|
|
try { |
|
|
|
|
//value = selectedThread.LocalVariables[expresion].Value.ToString();
|
|
|
|
|
ResolveResult result = ParserService.Resolve(expression, logicPos.Y, startIndex, textArea.MotherTextEditorControl.FileName, doc.TextContent); |
|
|
|
|
string value = GetText(result); |
|
|
|
|
if (value != null) { |
|
|
|
|
textArea.SetToolTip(value); |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
Console.Beep(); |
|
|
|
|
Console.WriteLine(); |
|
|
|
|
Console.WriteLine(e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static string GetText(ResolveResult result) |
|
|
|
|
{ |
|
|
|
|
if (result == null) |
|
|
|
|
return null; |
|
|
|
|
IAmbience ambience = AmbienceService.CurrentAmbience; |
|
|
|
|
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags |
|
|
|
|
| ConversionFlags.ShowAccessibility; |
|
|
|
|
if (result is MemberResolveResult) { |
|
|
|
|
MemberResolveResult rr = (MemberResolveResult)result; |
|
|
|
|
IMember member = rr.ResolvedMember; |
|
|
|
|
if (member is IIndexer) |
|
|
|
|
return ambience.Convert(member as IIndexer); |
|
|
|
|
if (member is IField) |
|
|
|
|
return ambience.Convert(member as IField); |
|
|
|
|
if (member is IProperty) |
|
|
|
|
return ambience.Convert(member as IProperty); |
|
|
|
|
if (member is IEvent) |
|
|
|
|
return ambience.Convert(member as IEvent); |
|
|
|
|
if (member is IMethod) |
|
|
|
|
return ambience.Convert(member as IMethod); |
|
|
|
|
return "unknown member " + member.ToString(); |
|
|
|
|
} else if (result is LocalResolveResult) { |
|
|
|
|
LocalResolveResult rr = (LocalResolveResult)result; |
|
|
|
|
ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedNames |
|
|
|
|
| ConversionFlags.ShowReturnType |
|
|
|
|
| ConversionFlags.QualifiedNamesOnlyForReturnTypes; |
|
|
|
|
if (rr.IsParameter) |
|
|
|
|
return "parameter " + ambience.Convert(rr.Field); |
|
|
|
|
else |
|
|
|
|
return "local variable " + ambience.Convert(rr.Field); |
|
|
|
|
} else if (result is NamespaceResolveResult) { |
|
|
|
|
return "namespace " + ((NamespaceResolveResult)result).Name; |
|
|
|
|
} else if (result is TypeResolveResult) { |
|
|
|
|
return ambience.Convert(((TypeResolveResult)result).ResolvedClass); |
|
|
|
|
} else { |
|
|
|
|
if (result.ResolvedType == null) |
|
|
|
|
return null; |
|
|
|
|
else |
|
|
|
|
return "expression of type " + ambience.Convert(result.ResolvedType); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|