|
|
|
|
@ -95,6 +95,15 @@ namespace CSharpBinding
@@ -95,6 +95,15 @@ namespace CSharpBinding
|
|
|
|
|
} else if (ch == '.') { |
|
|
|
|
editor.ShowCompletionWindow(new CSharpCodeCompletionDataProvider(), ch); |
|
|
|
|
return true; |
|
|
|
|
} else if (ch == '>') { |
|
|
|
|
if (IsInComment(editor)) return false; |
|
|
|
|
LineSegment segment = editor.Document.GetLineSegmentForOffset(editor.ActiveTextAreaControl.Caret.Offset); |
|
|
|
|
TextWord sign = segment.GetWord(editor.ActiveTextAreaControl.Caret.Column - 1); |
|
|
|
|
if (sign.Word == "-") { |
|
|
|
|
editor.ShowCompletionWindow(new PointerArrowCompletionDataProvider(), ch); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (char.IsLetter(ch) && CodeCompletionOptions.CompleteWhenTyping) { |
|
|
|
|
@ -131,6 +140,34 @@ namespace CSharpBinding
@@ -131,6 +140,34 @@ namespace CSharpBinding
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class PointerArrowCompletionDataProvider : CodeCompletionDataProvider |
|
|
|
|
{ |
|
|
|
|
protected override ResolveResult Resolve(ExpressionResult expressionResult, int caretLineNumber, int caretColumn, string fileName, string fileContent) |
|
|
|
|
{ |
|
|
|
|
ResolveResult rr = base.Resolve(expressionResult, caretLineNumber, caretColumn, fileName, fileContent); |
|
|
|
|
if (rr != null && rr.ResolvedType != null) { |
|
|
|
|
PointerReturnType prt = rr.ResolvedType.CastToDecoratingReturnType<PointerReturnType>(); |
|
|
|
|
if (prt != null) |
|
|
|
|
return new ResolveResult(rr.CallingClass, rr.CallingMember, prt.BaseType); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected override ExpressionResult GetExpression(ICSharpCode.TextEditor.TextArea textArea) |
|
|
|
|
{ |
|
|
|
|
ICSharpCode.TextEditor.Document.IDocument document = textArea.Document; |
|
|
|
|
IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(fileName); |
|
|
|
|
if (expressionFinder == null) { |
|
|
|
|
return new ExpressionResult(TextUtilities.GetExpressionBeforeOffset(textArea, textArea.Caret.Offset - 1)); |
|
|
|
|
} else { |
|
|
|
|
ExpressionResult res = expressionFinder.FindExpression(document.GetText(0, textArea.Caret.Offset - 1), textArea.Caret.Offset - 1); |
|
|
|
|
if (overrideContext != null) |
|
|
|
|
res.Context = overrideContext; |
|
|
|
|
return res; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool IsInComment(SharpDevelopTextAreaControl editor) |
|
|
|
|
{ |
|
|
|
|
CSharpExpressionFinder ef = CreateExpressionFinder(editor.FileName); |
|
|
|
|
|