public void RegisterSourceFile(IIntellisenseControl intellisenseControl, ICompletionAssistant completionAssistant, TextEditor editor, ISourceFile file, TextDocument textDocument)
{
CSharpDataAssociation association = null;
if (dataAssociations.TryGetValue(file, out association))
{
throw new Exception("Source file already registered with language service.");
}
association = new CSharpDataAssociation(textDocument);
association.Solution = file.Project.Solution as OmniSharpSolution; // CanHandle has checked this.
dataAssociations.Add(file, association);
association.KeyUpHandler = (sender, e) =>
{
if (editor.TextDocument == textDocument)
{
switch (e.Key)
{
case Key.Return:
{
if (editor.CaretIndex >= 0 && editor.CaretIndex < editor.TextDocument.TextLength)
{
if (editor.TextDocument.GetCharAt(editor.CaretIndex) == '}')
{
editor.TextDocument.Insert(editor.CaretIndex, Environment.NewLine);
editor.CaretIndex--;
var currentLine = editor.TextDocument.GetLineByOffset(editor.CaretIndex);
editor.CaretIndex = IndentationStrategy.IndentLine(editor.TextDocument, currentLine, editor.CaretIndex);
editor.CaretIndex = IndentationStrategy.IndentLine(editor.TextDocument, currentLine.NextLine.NextLine,
editor.CaretIndex);
editor.CaretIndex = IndentationStrategy.IndentLine(editor.TextDocument, currentLine.NextLine, editor.CaretIndex);
}
var newCaret = IndentationStrategy.IndentLine(editor.TextDocument,
editor.TextDocument.GetLineByOffset(editor.CaretIndex), editor.CaretIndex);
editor.CaretIndex = newCaret;
}
}
break;
}
}
};
editor.AddHandler(InputElement.KeyUpEvent, association.KeyUpHandler, RoutingStrategies.Tunnel);
}