Browse Source

Tooltip now shows the type of variables.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@73 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
661a64dd21
  1. 70
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs
  2. 8
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaMouseHandler.cs
  3. 4
      src/Main/Base/Project/Src/Dom/Implementations/AbstractClass.cs
  4. 28
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  5. 5
      src/Main/Base/Project/Src/Services/AmbienceService/AbstractAmbience.cs
  6. 182
      src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs

70
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs

@ -55,6 +55,9 @@ namespace ICSharpCode.TextEditor @@ -55,6 +55,9 @@ namespace ICSharpCode.TextEditor
SelectionManager selectionManager;
Caret caret;
ToolTip toolTip = new ToolTip();
bool toolTipSet = false;
public TextEditorControl MotherTextEditorControl {
get {
return motherTextEditorControl;
@ -226,18 +229,18 @@ namespace ICSharpCode.TextEditor @@ -226,18 +229,18 @@ namespace ICSharpCode.TextEditor
}
foreach (BracketHighlightingSheme bracketsheme in bracketshemes) {
// if (bracketsheme.IsInside(textareapainter.Document, textareapainter.Document.Caret.Offset)) {
Highlight highlight = bracketsheme.GetHighlight(Document, Caret.Offset - 1);
if (textView.Highlight != null && textView.Highlight.OpenBrace.Y >=0 && textView.Highlight.OpenBrace.Y < Document.TotalNumberOfLines) {
UpdateLine(textView.Highlight.OpenBrace.Y);
}
if (textView.Highlight != null && textView.Highlight.CloseBrace.Y >=0 && textView.Highlight.CloseBrace.Y < Document.TotalNumberOfLines) {
UpdateLine(textView.Highlight.CloseBrace.Y);
}
textView.Highlight = highlight;
if (highlight != null) {
changed = true;
break;
}
Highlight highlight = bracketsheme.GetHighlight(Document, Caret.Offset - 1);
if (textView.Highlight != null && textView.Highlight.OpenBrace.Y >=0 && textView.Highlight.OpenBrace.Y < Document.TotalNumberOfLines) {
UpdateLine(textView.Highlight.OpenBrace.Y);
}
if (textView.Highlight != null && textView.Highlight.CloseBrace.Y >=0 && textView.Highlight.CloseBrace.Y < Document.TotalNumberOfLines) {
UpdateLine(textView.Highlight.CloseBrace.Y);
}
textView.Highlight = highlight;
if (highlight != null) {
changed = true;
break;
}
// }
}
if (changed || textView.Highlight != null) {
@ -293,9 +296,29 @@ namespace ICSharpCode.TextEditor @@ -293,9 +296,29 @@ namespace ICSharpCode.TextEditor
}
}
string oldToolTip;
public void SetToolTip(string text)
{
if (oldToolTip == text)
return;
ToolTip toolTip = this.toolTip;
if (text == null) {
toolTip.Hide(this.FindForm());
} else {
Point p = PointToClient(Control.MousePosition);
p.Offset(3, 3);
toolTip.Show(text, this, p);
toolTipSet = true;
}
oldToolTip = text;
}
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
toolTipSet = false;
base.OnMouseMove(e);
if (!toolTipSet)
SetToolTip(null);
foreach (AbstractMargin margin in leftMargins) {
if (margin.DrawingPosition.Contains(e.X, e.Y)) {
this.Cursor = margin.Cursor;
@ -349,8 +372,8 @@ namespace ICSharpCode.TextEditor @@ -349,8 +372,8 @@ namespace ICSharpCode.TextEditor
Console.WriteLine("Got exception : " + ex);
}
// clipRectangle.Intersect(updateMargin.DrawingPosition);
}
}
if (clipRectangle.Width <= 0 || clipRectangle.Height <= 0) {
return;
}
@ -512,7 +535,7 @@ namespace ICSharpCode.TextEditor @@ -512,7 +535,7 @@ namespace ICSharpCode.TextEditor
Caret.UpdateCaretPosition();
}
return true;
}
}
return false;
}
@ -671,10 +694,11 @@ namespace ICSharpCode.TextEditor @@ -671,10 +694,11 @@ namespace ICSharpCode.TextEditor
base.Dispose(disposing);
if (disposing) {
Caret.Dispose();
toolTip.Dispose();
}
}
#region UPDATE Commands
#region UPDATE Commands
internal void UpdateLine(int line)
{
UpdateLines(0, line, line);
@ -684,8 +708,8 @@ namespace ICSharpCode.TextEditor @@ -684,8 +708,8 @@ namespace ICSharpCode.TextEditor
{
UpdateLines(0, lineBegin, lineEnd);
}
internal void UpdateToEnd(int lineBegin)
internal void UpdateToEnd(int lineBegin)
{
// if (lineBegin > FirstPhysicalLine + textView.VisibleLineCount) {
// return;
@ -695,8 +719,8 @@ namespace ICSharpCode.TextEditor @@ -695,8 +719,8 @@ namespace ICSharpCode.TextEditor
int y = Math.Max( 0, (int)(lineBegin * textView.FontHeight));
y = Math.Max(0, y - this.virtualTop.Y);
Rectangle r = new Rectangle(0,
y,
Width,
y,
Width,
Height - y);
Invalidate(r);
}
@ -732,13 +756,13 @@ namespace ICSharpCode.TextEditor @@ -732,13 +756,13 @@ namespace ICSharpCode.TextEditor
int height = Math.Min(textView.DrawingPosition.Height, (int)((1 + lineEnd - lineBegin) * (textView.FontHeight + 1)));
Rectangle r = new Rectangle(0,
y - 1 - this.virtualTop.Y,
Width,
y - 1 - this.virtualTop.Y,
Width,
height + 3);
Invalidate(r);
}
#endregion
#endregion
public event KeyEventHandler KeyEventHandler;
public event DialogKeyProcessor DoProcessDialogKey;
}

8
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaMouseHandler.cs

@ -21,7 +21,6 @@ namespace ICSharpCode.TextEditor @@ -21,7 +21,6 @@ namespace ICSharpCode.TextEditor
/// </summary>
public class TextAreaMouseHandler
{
ToolTip toolTip = new ToolTip();
TextArea textArea;
bool doubleclick = false;
Point mousepos = new Point(0, 0);
@ -54,7 +53,6 @@ namespace ICSharpCode.TextEditor @@ -54,7 +53,6 @@ namespace ICSharpCode.TextEditor
textArea.MouseLeave += new EventHandler(OnMouseLeave);
textArea.MouseUp += new MouseEventHandler(OnMouseUp);
textArea.LostFocus += new EventHandler(TextAreaLostFocus);
}
void ShowHiddenCursor()
@ -150,7 +148,7 @@ namespace ICSharpCode.TextEditor @@ -150,7 +148,7 @@ namespace ICSharpCode.TextEditor
}
}
sb.Replace("\t", " ");
toolTip.SetToolTip(textArea, sb.ToString());
textArea.SetToolTip(sb.ToString());
return;
}
@ -159,12 +157,10 @@ namespace ICSharpCode.TextEditor @@ -159,12 +157,10 @@ namespace ICSharpCode.TextEditor
List<TextMarker> markers = textArea.Document.MarkerStrategy.GetMarkers(clickPosition2);
foreach (TextMarker tm in markers) {
if (tm.ToolTip != null) {
toolTip.SetToolTip(textArea, tm.ToolTip.Replace("\t", " "));
textArea.SetToolTip(tm.ToolTip.Replace("\t", " "));
return;
}
}
toolTip.SetToolTip(textArea, null);
}
if (e.Button == MouseButtons.Left) {

4
src/Main/Base/Project/Src/Dom/Implementations/AbstractClass.cs

@ -352,7 +352,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -352,7 +352,7 @@ namespace ICSharpCode.SharpDevelop.Dom
// enums must be handled specially, because there are several things defined we don't want to show
// and enum members have neither the modifier nor the modifier public
if (ClassType == ClassType.Enum) {
/*if (ClassType == ClassType.Enum) {
foreach (IField f in Fields) {
if (f.IsLiteral) {
members.Add(f);
@ -360,7 +360,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -360,7 +360,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
members.AddRange(ProjectContent.GetClass("System.Enum").GetAccessibleMembers(callingClass, showStatic).ToArray());
return members;
}
}*/
bool isClassInInheritanceTree = false;
if (callingClass != null)

28
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -138,7 +138,16 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -138,7 +138,16 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return new MemberResolveResult(callingClass, callingMember, method);
} else if (expr is FieldReferenceExpression) {
FieldReferenceExpression fieldReferenceExpression = (FieldReferenceExpression)expr;
IReturnType returnType = fieldReferenceExpression.TargetObject.AcceptVisitor(typeVisitor, null) as IReturnType;
IReturnType returnType;
if (fieldReferenceExpression.FieldName == null || fieldReferenceExpression.FieldName == "") {
if (fieldReferenceExpression.TargetObject is TypeReferenceExpression) {
returnType = new ReturnType(((TypeReferenceExpression)fieldReferenceExpression.TargetObject).TypeReference);
IClass c = projectContent.GetClass(returnType.FullyQualifiedName);
if (c != null)
return new TypeResolveResult(callingClass, callingMember, returnType, c);
}
}
returnType = fieldReferenceExpression.TargetObject.AcceptVisitor(typeVisitor, null) as IReturnType;
if (returnType != null) {
string name = SearchNamespace(returnType.FullyQualifiedName, this.CompilationUnit);
if (name != null) {
@ -193,10 +202,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -193,10 +202,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (name != null && name != "") {
return new NamespaceResolveResult(callingClass, callingMember, name);
}
IClass c = SearchType(identifier, this.CallingClass, this.CompilationUnit);
if (c != null) {
return new TypeResolveResult(callingClass, callingMember, new ReturnType(c.FullyQualifiedName), c);
}
LocalLookupVariable var = SearchVariable(identifier);
if (var != null) {
IReturnType type = GetVariableType(var);
@ -208,16 +213,19 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -208,16 +213,19 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
IField field = new LocalVariableField(para.ReturnType, para.Name, para.Region, callingClass);
return new LocalResolveResult(callingClass, callingMember, field, true);
}
IMember member = GetMember(callingClass, identifier);
if (member != null) {
return new MemberResolveResult(callingClass, callingMember, member);
}
ResolveResult result = ResolveMethod(callingClass, identifier);
if (result != null)
return result;
IClass c = SearchType(identifier, this.CallingClass, cu);
if (c != null) {
return new TypeResolveResult(callingClass, callingMember, new ReturnType(c.FullyQualifiedName), c);
}
// try if there exists a static member in outer classes named typeName
List<IClass> classes = cu.GetOuterClasses(caretLine, caretColumn);
foreach (IClass c2 in classes) {
@ -517,17 +525,17 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -517,17 +525,17 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(c);
foreach (IClass curType in c.ClassInheritanceTree) {
foreach (IProperty p in curType.Properties) {
if (IsSameName(p.Name, memberName) && p.MustBeShown(callingClass, true, isClassInInheritanceTree)) {
if (IsSameName(p.Name, memberName) && p.IsAccessible(callingClass, isClassInInheritanceTree)) {
return p;
}
}
foreach (IField f in curType.Fields) {
if (IsSameName(f.Name, memberName) && f.MustBeShown(callingClass, true, isClassInInheritanceTree)) {
if (IsSameName(f.Name, memberName) && f.IsAccessible(callingClass, isClassInInheritanceTree)) {
return f;
}
}
foreach (IEvent e in curType.Events) {
if (IsSameName(e.Name, memberName) && e.MustBeShown(callingClass, true, isClassInInheritanceTree)) {
if (IsSameName(e.Name, memberName) && e.IsAccessible(callingClass, isClassInInheritanceTree)) {
return e;
}
}

5
src/Main/Base/Project/Src/Services/AmbienceService/AbstractAmbience.cs

@ -13,10 +13,7 @@ namespace ICSharpCode.Core @@ -13,10 +13,7 @@ namespace ICSharpCode.Core
{
public abstract class AbstractAmbience : IAmbience
{
ConversionFlags conversionFlags = ConversionFlags.ShowParameterNames |
ConversionFlags.UseFullyQualifiedNames |
ConversionFlags.ShowInheritanceList |
ConversionFlags.ShowModifiers;
ConversionFlags conversionFlags = ConversionFlags.StandardConversionFlags;
public ConversionFlags ConversionFlags {
get {

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

@ -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;
@ -128,7 +129,7 @@ namespace ICSharpCode.Core @@ -128,7 +129,7 @@ namespace ICSharpCode.Core
if (debugger != null) {
debugger.Stop();
}
debugger.DebugStopped -= new EventHandler(HandleDebugStopped);
debugger.Dispose();
@ -195,7 +196,7 @@ namespace ICSharpCode.Core @@ -195,7 +196,7 @@ namespace ICSharpCode.Core
startInfo.UseShellExecute = false;
StartWithoutDebugging(startInfo);
}
public static void Start(string fileName, string workingDirectory, string arguments)
{
if (IsProcessRuning) {
@ -235,7 +236,7 @@ namespace ICSharpCode.Core @@ -235,7 +236,7 @@ namespace ICSharpCode.Core
debugger.Continue();
}
}
public static void Step(bool stepInto)
{
IDebugger debugger = CurrentDebugger;
@ -280,7 +281,7 @@ namespace ICSharpCode.Core @@ -280,7 +281,7 @@ namespace ICSharpCode.Core
{
standardProcess.Exited -= new EventHandler(StandardProcessExited);
standardProcess.Dispose();
standardProcess = null;
standardProcess = null;
isRunning = false;
}
@ -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",
@ -311,37 +312,37 @@ namespace ICSharpCode.Core @@ -311,37 +312,37 @@ namespace ICSharpCode.Core
public static event EventHandler BreakPointChanged;
public static event EventHandler BreakPointAdded;
public static event EventHandler BreakPointRemoved;
static void OnBreakPointChanged(EventArgs e)
static void OnBreakPointChanged(EventArgs e)
{
if (BreakPointChanged != null) {
BreakPointChanged(null, e);
}
}
static void OnBreakPointAdded(EventArgs e)
}
static void OnBreakPointAdded(EventArgs e)
{
if (BreakPointAdded != null) {
BreakPointAdded(null, e);
}
}
static void OnBreakPointRemoved(EventArgs e)
}
static void OnBreakPointRemoved(EventArgs e)
{
if (BreakPointRemoved != null) {
BreakPointRemoved(null, e);
}
}
static List<Breakpoint> breakpoints = new List<Breakpoint>();
public static IList<Breakpoint> Breakpoints {
get {
return breakpoints;
}
}
public static void ToggleBreakpointAt(string fileName, int line, int column)
{
foreach(Breakpoint b in breakpoints) {
@ -354,38 +355,38 @@ namespace ICSharpCode.Core @@ -354,38 +355,38 @@ namespace ICSharpCode.Core
breakpoints.Add(new Breakpoint(fileName, line));
OnBreakPointAdded(EventArgs.Empty);
}
class BreakpointMarker: TextMarker
{
{
public BreakpointMarker(int offset, int length, TextMarkerType textMarkerType, Color color, Color foreColor):base(offset, length, textMarkerType, color, foreColor)
{
}
}
class CurrentLineMarker: TextMarker
{
{
public CurrentLineMarker(int offset, int length, TextMarkerType textMarkerType, Color color, Color foreColor):base(offset, length, textMarkerType, color, foreColor)
{
}
}
public static void InitializeService2()
{
{
WorkbenchSingleton.WorkbenchCreated += new EventHandler(WorkspaceCreated);
}
static void WorkspaceCreated(object sender, EventArgs args)
{
WorkbenchSingleton.Workbench.ViewOpened += new ViewContentEventHandler(ViewContentOpened);
WorkbenchSingleton.Workbench.ViewClosed += new ViewContentEventHandler(ViewContentClosed);
}
static void ViewContentOpened(object sender, ViewContentEventArgs e)
{
if (e.Content.Control is TextEditor.TextEditorControl) {
@ -409,8 +410,8 @@ namespace ICSharpCode.Core @@ -409,8 +410,8 @@ namespace ICSharpCode.Core
textArea.MouseMove -= new MouseEventHandler(TextAreaMouseMove);
}
}
static TextMarker currentLineMarker;
static IDocument currentLineMarkerParent;
@ -424,16 +425,16 @@ namespace ICSharpCode.Core @@ -424,16 +425,16 @@ namespace ICSharpCode.Core
currentLineMarker = null;
}
}
static public void JumpToCurrentLine(string SourceFullFilename, int StartLine, int StartColumn, int EndLine, int EndColumn)
{
RemoveCurrentLineMarker();
FileService.OpenFile(SourceFullFilename);
IWorkbenchWindow window = FileService.GetOpenFile(SourceFullFilename);
if (window != null) {
IViewContent content = window.ViewContent;
if (content is IPositionable) {
((IPositionable)content).JumpTo((int)StartLine - 1, (int)StartColumn - 1);
}
@ -450,9 +451,9 @@ namespace ICSharpCode.Core @@ -450,9 +451,9 @@ namespace ICSharpCode.Core
}
}
}
static void IconBarMouseDown(AbstractMargin iconBar, Point mousepos, MouseButtons mouseButtons)
{
Rectangle viewRect = iconBar.TextArea.TextView.DrawingPosition;
@ -465,8 +466,8 @@ namespace ICSharpCode.Core @@ -465,8 +466,8 @@ namespace ICSharpCode.Core
}
}
static void RefreshBreakpointMarkersInEditor(TextEditorControl textEditor)
static void RefreshBreakpointMarkersInEditor(TextEditorControl textEditor)
{
IDocument document = textEditor.Document;
System.Collections.Generic.List<ICSharpCode.TextEditor.Document.TextMarker> markers = textEditor.Document.MarkerStrategy.TextMarker;
@ -489,7 +490,7 @@ namespace ICSharpCode.Core @@ -489,7 +490,7 @@ namespace ICSharpCode.Core
document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea));
document.CommitUpdate();
}
/// <summary>
/// Draw Breakpoint icon and the yellow arrow in the margin
/// </summary>
@ -504,7 +505,7 @@ namespace ICSharpCode.Core @@ -504,7 +505,7 @@ namespace ICSharpCode.Core
}
}
}
foreach (TextMarker textMarker in iconBar.TextArea.Document.MarkerStrategy.TextMarker) {
CurrentLineMarker currentLineMarker = textMarker as CurrentLineMarker;
if (currentLineMarker != null) {
@ -516,15 +517,12 @@ namespace ICSharpCode.Core @@ -516,15 +517,12 @@ namespace ICSharpCode.Core
}
}
}
static TextMarker variableMarker;
static IDocument variableMarkerParent;
/// <summary>
/// This function shows variable values as tooltips
/// </summary>
static void TextAreaMouseMove(object sender, MouseEventArgs args)
{
{
TextArea textArea = (TextArea)sender;
Point mousepos = textArea.PointToClient(Control.MousePosition);
@ -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);
}
}
}
}

Loading…
Cancel
Save