Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/addins/CBinding/Gui/CTextEditorExtension.cs')
-rw-r--r--[-rwxr-xr-x]main/src/addins/CBinding/Gui/CTextEditorExtension.cs133
1 files changed, 74 insertions, 59 deletions
diff --git a/main/src/addins/CBinding/Gui/CTextEditorExtension.cs b/main/src/addins/CBinding/Gui/CTextEditorExtension.cs
index 690baf3ea6..d5e8ccf14e 100755..100644
--- a/main/src/addins/CBinding/Gui/CTextEditorExtension.cs
+++ b/main/src/addins/CBinding/Gui/CTextEditorExtension.cs
@@ -44,10 +44,15 @@ using MonoDevelop.Components;
using MonoDevelop.Components.Commands;
using CBinding.Parser;
-using Mono.TextEditor;
using MonoDevelop.Ide.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Completion;
+using ICSharpCode.NRefactory6.CSharp.Completion;
+using MonoDevelop.Ide.Editor;
+using MonoDevelop.Core.Text;
+using MonoDevelop.Ide.Editor.Extension;
+using System.Threading.Tasks;
+using System.Threading;
namespace CBinding
{
@@ -80,7 +85,6 @@ namespace CBinding
new KeyValuePair<string, GetMembersForExtension>(".", GetInstanceMembers)
};
- protected Mono.TextEditor.TextEditorData textEditorData{ get; set; }
public override string CompletionLanguage {
get {
@@ -101,7 +105,7 @@ namespace CBinding
return IsOpenBrace (c) || IsCloseBrace (c);
}
- static int SearchMatchingBracket (TextEditorData editor, int offset, char openBracket, char closingBracket, int direction)
+ static int SearchMatchingBracket (IReadonlyTextDocument editor, int offset, char openBracket, char closingBracket, int direction)
{
bool isInString = false;
bool isInChar = false;
@@ -142,7 +146,7 @@ namespace CBinding
return -1;
}
- static int GetClosingBraceForLine (TextEditorData editor, DocumentLine line, out int openingLine)
+ static int GetClosingBraceForLine (IReadonlyTextDocument editor, IDocumentLine line, out int openingLine)
{
int offset = SearchMatchingBracket (editor, line.Offset, '{', '}', -1);
if (offset == -1) {
@@ -150,46 +154,46 @@ namespace CBinding
return -1;
}
- openingLine = editor.Document.OffsetToLineNumber (offset);
+ openingLine = editor.OffsetToLineNumber (offset);
return offset;
}
- public override bool KeyPress (Gdk.Key key, char keyChar, Gdk.ModifierType modifier)
+ public override bool KeyPress (KeyDescriptor descriptor)
{
- var line = Editor.Document.GetLine (Editor.Caret.Line);
- string lineText = Editor.GetLineText (Editor.Caret.Line);
- int lineCursorIndex = Math.Min (lineText.Length, Editor.Caret.Column);
+ var line = Editor.GetLine (Editor.CaretLine);
+ string lineText = Editor.GetLineText (Editor.CaretLine);
+ int lineCursorIndex = Math.Min (lineText.Length, Editor.CaretColumn);
// Smart Indentation
- if (Document.Editor.Options.IndentStyle == IndentStyle.Smart)
+ if (Editor.Options.IndentStyle == IndentStyle.Smart)
{
- if (keyChar == '}') {
+ if (descriptor.KeyChar == '}') {
// Only indent if the brace is preceeded by whitespace.
if(AllWhiteSpace(lineText.Substring(0, lineCursorIndex))) {
int braceOpeningLine;
if(GetClosingBraceForLine(Editor, line, out braceOpeningLine) >= 0)
{
- Editor.Replace (line.Offset, line.Length, GetIndent(Editor, braceOpeningLine, 0) + "}" + lineText.Substring(lineCursorIndex));
- Editor.Document.CommitLineUpdate (line);
+ Editor.ReplaceText (line.Offset, line.Length, GetIndent(Editor, braceOpeningLine, 0) + "}" + lineText.Substring(lineCursorIndex));
return false;
}
}
} else {
- switch(key)
+ switch(descriptor.SpecialKey)
{
- case Gdk.Key.Return:
+ case SpecialKey.Return:
// Calculate additional indentation, if any.
char finalChar = '\0';
char nextChar = '\0';
string indent = String.Empty;
if (!String.IsNullOrEmpty (Editor.SelectedText)) {
int cursorPos = Editor.SelectionRange.Offset;
+
+ Editor.RemoveText (Editor.SelectionRange);
- Editor.DeleteSelectedText ();
- Editor.Caret.Offset = cursorPos;
+ Editor.CaretOffset = cursorPos;
- lineText = Editor.GetLineText (Editor.Caret.Line);
- lineCursorIndex = Editor.Caret.Column;
+ lineText = Editor.GetLineText (Editor.CaretLine);
+ lineCursorIndex = Editor.CaretColumn;
// System.Console.WriteLine(TextEditorData.Caret.Offset);
}
if(lineText.Length > 0)
@@ -201,7 +205,7 @@ namespace CBinding
nextChar = lineText[lineCursorIndex];
if(finalChar == '{')
- indent = Document.Editor.Options.IndentationString;
+ indent = Editor.Options.GetIndentationString ();
}
// If the next character is an closing brace, indent it appropriately.
@@ -216,7 +220,7 @@ namespace CBinding
}
// Default indentation method
- Editor.InsertAtCaret (Editor.EolMarker + indent + GetIndent(Editor, Editor.Document.OffsetToLineNumber (line.Offset), lineCursorIndex));
+ Editor.InsertAtCaret (Editor.EolMarker + indent + GetIndent(Editor, Editor.OffsetToLineNumber (line.Offset), lineCursorIndex));
return false;
@@ -224,10 +228,10 @@ namespace CBinding
}
}
- return base.KeyPress (key, keyChar, modifier);
+ return base.KeyPress (descriptor);
}
-
- public override ICompletionDataList HandleCodeCompletion (CodeCompletionContext completionContext, char completionChar, ref int triggerWordLength)
+
+ public override Task<ICompletionDataList> HandleCodeCompletionAsync (CodeCompletionContext completionContext, char completionChar, CancellationToken token = default(CancellationToken))
{
string lineText = Editor.GetLineText (completionContext.TriggerLine).TrimEnd();
@@ -242,15 +246,15 @@ namespace CBinding
if (string.IsNullOrEmpty (itemName))
return null;
- return pair.Value (this, pair.Key, itemName);
+ return Task.FromResult ((ICompletionDataList)pair.Value (this, pair.Key, itemName));
}
}
if (char.IsLetter (completionChar)) {
// Aggressive completion
- ICompletionDataList list = GlobalComplete ();
- triggerWordLength = ResetTriggerOffset (completionContext);
- return list;
+ var list = GlobalComplete ();
+ list.TriggerWordLength = ResetTriggerOffset (completionContext);
+ return Task.FromResult ((ICompletionDataList)list);
}
return null;
@@ -286,12 +290,11 @@ namespace CBinding
CodeCompletionContext completionContext)
{
int pos = completionContext.TriggerOffset;
- string lineText = Editor.GetLineText (Editor.Caret.Line).Trim();
+ string lineText = Editor.GetLineText (Editor.CaretLine).Trim();
foreach (KeyValuePair<string, GetMembersForExtension> pair in completionExtensions) {
if(lineText.EndsWith(pair.Key)) {
- int triggerWordLength = completionContext.TriggerWordLength;
- return HandleCodeCompletion (completionContext, Editor.GetCharAt (pos), ref triggerWordLength);
+ return HandleCodeCompletionAsync (completionContext, Editor.GetCharAt (pos)).Result;
}
}
@@ -350,7 +353,7 @@ namespace CBinding
private CompletionDataList GetMembersOfItem (string itemFullName)
{
- CProject project = Document.Project as CProject;
+ CProject project = DocumentContext.Project as CProject;
if (project == null)
return null;
@@ -361,7 +364,7 @@ namespace CBinding
LanguageItem container = null;
- string currentFileName = Document.FileName;
+ string currentFileName = DocumentContext.Name;
bool in_project = false;
foreach (LanguageItem li in info.Containers ()) {
@@ -433,7 +436,7 @@ namespace CBinding
/// </returns>
private CompletionDataList GetMembersOfInstance (string instanceName, bool isPointer)
{
- CProject project = Document.Project as CProject;
+ CProject project = DocumentContext.Project as CProject;
if (project == null)
return null;
@@ -444,7 +447,7 @@ namespace CBinding
string container = null;
- string currentFileName = Document.FileName;
+ string currentFileName = DocumentContext.Name;
bool in_project = false;
// Find the typename of the instance
@@ -518,9 +521,9 @@ namespace CBinding
}
}
- private ICompletionDataList GlobalComplete ()
+ private CompletionDataList GlobalComplete ()
{
- CProject project = Document.Project as CProject;
+ CProject project = DocumentContext.Project as CProject;
if (project == null)
return null;
@@ -544,7 +547,7 @@ namespace CBinding
foreach (Macro m in info.Macros)
list.Add (new CompletionData (m));
- string currentFileName = Document.FileName;
+ string currentFileName = DocumentContext.Name;
if (info.IncludedFiles.ContainsKey (currentFileName)) {
foreach (CBinding.Parser.FileInformation fi in info.IncludedFiles[currentFileName]) {
@@ -567,19 +570,18 @@ namespace CBinding
return list;
}
- public override MonoDevelop.Ide.CodeCompletion.ParameterDataProvider HandleParameterCompletion (
- CodeCompletionContext completionContext, char completionChar)
+ public override Task<MonoDevelop.Ide.CodeCompletion.ParameterHintingResult> HandleParameterCompletionAsync (CodeCompletionContext completionContext, char completionChar, CancellationToken token = default(CancellationToken))
{
if (completionChar != '(')
return null;
- CProject project = Document.Project as CProject;
+ CProject project = DocumentContext.Project as CProject;
if (project == null)
return null;
ProjectInformation info = ProjectInformationManager.Instance.Get (project);
- string lineText = Editor.GetLineText (Editor.Caret.Line).TrimEnd ();
+ string lineText = Editor.GetLineText (Editor.CaretLine).TrimEnd ();
if (lineText.EndsWith (completionChar.ToString (), StringComparison.Ordinal))
lineText = lineText.Remove (lineText.Length-1).TrimEnd ();
@@ -592,7 +594,7 @@ namespace CBinding
if (string.IsNullOrEmpty (functionName))
return null;
- return new ParameterDataProvider (nameStart, Document, info, functionName);
+ return Task.FromResult ((MonoDevelop.Ide.CodeCompletion.ParameterHintingResult)new ParameterDataProvider (nameStart, Editor, info, functionName));
}
private bool AllWhiteSpace (string lineText)
@@ -606,7 +608,7 @@ namespace CBinding
}
// Snatched from DefaultFormattingStrategy
- private string GetIndent (TextEditorData d, int lineNumber, int terminateIndex)
+ private string GetIndent (IReadonlyTextDocument d, int lineNumber, int terminateIndex)
{
string lineText = d.GetLineText (lineNumber);
if(terminateIndex > 0)
@@ -626,9 +628,9 @@ namespace CBinding
[CommandHandler (MonoDevelop.DesignerSupport.Commands.SwitchBetweenRelatedFiles)]
protected void Run ()
{
- var cp = this.Document.Project as CProject;
+ var cp = this.DocumentContext.Project as CProject;
if (cp != null) {
- string match = cp.MatchingFile (this.Document.FileName);
+ string match = cp.MatchingFile (this.DocumentContext.Name);
if (match != null)
MonoDevelop.Ide.IdeApp.Workbench.OpenDocument (match, true);
}
@@ -637,8 +639,8 @@ namespace CBinding
[CommandUpdateHandler (MonoDevelop.DesignerSupport.Commands.SwitchBetweenRelatedFiles)]
protected void Update (CommandInfo info)
{
- var cp = this.Document.Project as CProject;
- info.Visible = info.Visible = cp != null && cp.MatchingFile (this.Document.FileName) != null;
+ var cp = this.DocumentContext.Project as CProject;
+ info.Visible = info.Visible = cp != null && cp.MatchingFile (this.DocumentContext.Name) != null;
}
#region IPathedDocument implementation
@@ -655,9 +657,10 @@ namespace CBinding
object tag = path[index].Tag;
DropDownBoxListWindow.IListDataProvider provider = null;
if (tag is ParsedDocument) {
- provider = new CompilationUnitDataProvider (Document);
+ provider = new CompilationUnitDataProvider (Editor, DocumentContext);
} else {
- provider = new DataProvider (Document, tag, GetAmbience ());
+ // TODO: Roslyn port
+ //provider = new DataProvider (Editor, DocumentContext, tag, new NetAmbience ());
}
DropDownBoxListWindow window = new DropDownBoxListWindow (provider);
@@ -679,7 +682,7 @@ namespace CBinding
#endregion
// Yoinked from C# binding
- void UpdatePath (object sender, Mono.TextEditor.DocumentLocationEventArgs e)
+ void UpdatePath (object sender, EventArgs e)
{
/* var unit = Document.ParsedDocument;
if (unit == null)
@@ -718,13 +721,25 @@ namespace CBinding
OnPathChanged (new DocumentPathChangedEventArgs (prev));*/
}
- public override void Initialize ()
+ protected override void Initialize ()
{
base.Initialize ();
- textEditorData = Document.Editor;
UpdatePath (null, null);
- textEditorData.Caret.PositionChanged += UpdatePath;
- Document.DocumentParsed += delegate { UpdatePath (null, null); };
+ Editor.CaretPositionChanged += UpdatePath;
+ DocumentContext.DocumentParsed += HandleDocumentParsed;
+ }
+
+ void HandleDocumentParsed (object sender, EventArgs e)
+ {
+ UpdatePath (null, null);
+ }
+
+ public override void Dispose ()
+ {
+ Editor.CaretPositionChanged -= UpdatePath;
+ DocumentContext.DocumentParsed -= HandleDocumentParsed;
+
+ base.Dispose ();
}
/// <summary>
@@ -738,7 +753,7 @@ namespace CBinding
int accumulator = 0;
for (;
- 1 < i && char.IsLetterOrDigit (Editor.GetCharAt (i));
+ 1 < i && char.IsLetterOrDigit (Editor.GetCharAt (i));
--i, ++accumulator);
completionContext.TriggerOffset = i-1;
return accumulator+1;
@@ -747,7 +762,7 @@ namespace CBinding
[CommandHandler (MonoDevelop.Refactoring.RefactoryCommands.GotoDeclaration)]
public void GotoDeclaration ()
{
- LanguageItem item = GetLanguageItemAt (Editor.Caret.Location);
+ LanguageItem item = GetLanguageItemAt (Editor.CaretLocation);
if (item != null)
IdeApp.Workbench.OpenDocument ((FilePath)item.File, (int)item.Line, 1);
}
@@ -755,13 +770,13 @@ namespace CBinding
[CommandUpdateHandler (MonoDevelop.Refactoring.RefactoryCommands.GotoDeclaration)]
public void CanGotoDeclaration (CommandInfo item)
{
- item.Visible = (GetLanguageItemAt (Editor.Caret.Location) != null);
+ item.Visible = (GetLanguageItemAt (Editor.CaretLocation) != null);
item.Bypass = !item.Visible;
}
private LanguageItem GetLanguageItemAt (DocumentLocation location)
{
- CProject project = Document.Project as CProject;
+ CProject project = DocumentContext.Project as CProject;
string token = GetTokenAt (location);
if (project != null && !string.IsNullOrEmpty (token)) {
ProjectInformation info = ProjectInformationManager.Instance.Get (project);