diff options
Diffstat (limited to 'main/src/addins/CSharpBinding/AspNet/AspLanguageBuilder.cs')
-rw-r--r-- | main/src/addins/CSharpBinding/AspNet/AspLanguageBuilder.cs | 107 |
1 files changed, 61 insertions, 46 deletions
diff --git a/main/src/addins/CSharpBinding/AspNet/AspLanguageBuilder.cs b/main/src/addins/CSharpBinding/AspNet/AspLanguageBuilder.cs index 4e1fc93617..e6e4eaf509 100644 --- a/main/src/addins/CSharpBinding/AspNet/AspLanguageBuilder.cs +++ b/main/src/addins/CSharpBinding/AspNet/AspLanguageBuilder.cs @@ -23,17 +23,25 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - +/* using System; using System.Collections.Generic; using System.IO; using System.Text; -using Mono.TextEditor; using MonoDevelop.AspNet.WebForms; using MonoDevelop.AspNet.WebForms.Dom; using MonoDevelop.Ide.CodeCompletion; using MonoDevelop.Ide.Gui; using MonoDevelop.Ide.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem; +using MonoDevelop.CSharp.Parser; +using System.IO; +using ICSharpCode.NRefactory.Completion; +using MonoDevelop.AspNet.StateEngine; +using MonoDevelop.Xml.StateEngine; +using ICSharpCode.NRefactory6.CSharp.Completion; +using MonoDevelop.Ide.Editor; +using MonoDevelop.Core.Text; namespace MonoDevelop.CSharp.Completion { @@ -67,9 +75,8 @@ namespace MonoDevelop.CSharp.Completion builder.Append (" : "); builder.AppendLine (info.BaseType); } - - public LocalDocumentInfo BuildLocalDocument (DocumentInfo info, TextEditorData data, - string expressionText, string textAfterCaret, bool isExpression) + + LocalDocumentInfo ILanguageCompletionBuilder.BuildLocalDocument (DocumentInfo info, MonoDevelop.Ide.Editor.TextEditor data, string expressionText, string textAfterCaret, bool isExpression) { var sb = new StringBuilder (); @@ -84,12 +91,12 @@ namespace MonoDevelop.CSharp.Completion foreach (var node in info.XExpressions) { bool isBlock = node is WebFormsRenderBlock; - if (node.Region.Begin.Line > data.Caret.Line || node.Region.Begin.Line == data.Caret.Line && node.Region.Begin.Column > data.Caret.Column - 5) + if (node.Region.Begin.Line > data.CaretLine || node.Region.Begin.Line == data.CaretLine && node.Region.Begin.Column > data.CaretColumn - 5) continue; //Console.WriteLine ("take xprt:" + expressions.Key.BeginLine +"/" +expressions.Key.BeginColumn); - var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; - var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; + var start = data.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; + var end = data.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (!isBlock) { sb.Append ("WriteLine ("); @@ -114,53 +121,52 @@ namespace MonoDevelop.CSharp.Completion result.LocalDocument = sb.ToString (); result.CaretPosition = caretPosition; - result.OriginalCaretPosition = data.Caret.Offset; + result.OriginalCaretPosition = data.CaretOffset; result.ParsedLocalDocument = Parse (info.AspNetDocument.FileName, sb.ToString ()); return result; } - public ICompletionDataList HandlePopupCompletion (Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo) + public ICompletionDataList HandlePopupCompletion (TextEditor realEditor, DocumentContext realContext, DocumentInfo info, LocalDocumentInfo localInfo) { CodeCompletionContext codeCompletionContext; - using (var completion = CreateCompletion (realDocument, info, localInfo, out codeCompletionContext)) { + using (var completion = CreateCompletion (realEditor, realContext, info, localInfo, out codeCompletionContext)) { return completion.CodeCompletionCommand (codeCompletionContext); } } - public ICompletionDataList HandleCompletion (Document realDocument, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char currentChar, ref int triggerWordLength) + public ICompletionDataList HandleCompletion (TextEditor realEditor, DocumentContext realContext, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char currentChar, ref int triggerWordLength) { CodeCompletionContext ccc; - using (var completion = CreateCompletion (realDocument, info, localInfo, out ccc)) { - return completion.HandleCodeCompletion (completionContext, currentChar, ref triggerWordLength); + using (var completion = CreateCompletion (realEditor, realContext, info, localInfo, out ccc)) { + return completion.HandleCodeCompletionAsync (completionContext, currentChar, ref triggerWordLength); } } - public ParameterDataProvider HandleParameterCompletion (Document realDocument, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char completionChar) + public ParameterHintingResult HandleParameterCompletion (TextEditor realEditor, DocumentContext realContext, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char completionChar) { CodeCompletionContext ccc; - using (var completion = CreateCompletion (realDocument, info, localInfo, out ccc)) { - return completion.HandleParameterCompletion (completionContext, completionChar); + using (var completion = CreateCompletion (realEditor, realContext, info, localInfo, out ccc)) { + return completion.HandleParameterCompletionAsync (completionContext, completionChar); } } - public bool GetParameterCompletionCommandOffset (Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo, out int cpos) + public bool GetParameterCompletionCommandOffset (TextEditor realEditor, DocumentContext realContext, DocumentInfo info, LocalDocumentInfo localInfo, out int cpos) { CodeCompletionContext codeCompletionContext; - using (var completion = CreateCompletion (realDocument, info, localInfo, out codeCompletionContext)) { - return completion.GetParameterCompletionCommandOffset (out cpos); + using (var completion = CreateCompletion (realEditor, realContext, info, localInfo, out codeCompletionContext)) { + int wlen; + return completion.GetCompletionCommandOffset (out cpos, out wlen); } } - public ICompletionWidget CreateCompletionWidget (Document realDocument, LocalDocumentInfo localInfo) + public ICompletionWidget CreateCompletionWidget (TextEditor realEditor, DocumentContext realContext, LocalDocumentInfo localInfo) { - return new AspCompletionWidget (realDocument, localInfo); + return new AspCompletionWidget (realEditor, localInfo); } - CSharpCompletionTextEditorExtension CreateCompletion (Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo, out CodeCompletionContext codeCompletionContext) + CSharpCompletionTextEditorExtension CreateCompletion (TextEditor realEditor, DocumentContext realContext, DocumentInfo info, LocalDocumentInfo localInfo, out CodeCompletionContext codeCompletionContext) { - var doc = new TextDocument () { - Text = localInfo.LocalDocument, - }; + var doc = TextEditorFactory.CreateNewDocument (new StringTextSource (localInfo.LocalDocument), realEditor.FileName + ".cs"); var documentLocation = doc.OffsetToLocation (localInfo.CaretPosition); codeCompletionContext = new CodeCompletionContext () { @@ -170,16 +176,16 @@ namespace MonoDevelop.CSharp.Completion }; return new CSharpCompletionTextEditorExtension (localInfo.HiddenDocument) { - CompletionWidget = CreateCompletionWidget (realDocument, localInfo) + CompletionWidget = CreateCompletionWidget (realEditor, realContext, localInfo) }; } class AspCompletionWidget : ICompletionWidget { - Document realDocument; + TextEditor realDocument; LocalDocumentInfo localInfo; - public AspCompletionWidget (Document realDocument, LocalDocumentInfo localInfo) + public AspCompletionWidget (TextEditor realDocument, LocalDocumentInfo localInfo) { this.realDocument = realDocument; this.localInfo = localInfo; @@ -188,7 +194,7 @@ namespace MonoDevelop.CSharp.Completion #region ICompletionWidget implementation public CodeCompletionContext CurrentCodeCompletionContext { get { - int delta = realDocument.Editor.Caret.Offset - localInfo.OriginalCaretPosition; + int delta = realDocument.CaretOffset - localInfo.OriginalCaretPosition; return CreateCodeCompletionContext (localInfo.CaretPosition + delta); } } @@ -217,10 +223,10 @@ namespace MonoDevelop.CSharp.Completion public CodeCompletionContext CreateCodeCompletionContext (int triggerOffset) { - var savedCtx = realDocument.GetContent<ICompletionWidget> ().CreateCodeCompletionContext (realDocument.Editor.Caret.Offset + triggerOffset - localInfo.CaretPosition); + var savedCtx = realDocument.GetContent<ICompletionWidget> ().CreateCodeCompletionContext (realDocument.CaretOffset + triggerOffset - localInfo.CaretPosition); CodeCompletionContext result = new CodeCompletionContext (); result.TriggerOffset = triggerOffset; - DocumentLocation loc = localInfo.HiddenDocument.Editor.Document.OffsetToLocation (triggerOffset); + var loc = localInfo.HiddenDocument.Editor.OffsetToLocation (triggerOffset); result.TriggerLine = loc.Line; result.TriggerLineOffset = loc.Column - 1; @@ -234,9 +240,9 @@ namespace MonoDevelop.CSharp.Completion { if (ctx == null) return null; - int min = Math.Min (ctx.TriggerOffset, localInfo.HiddenDocument.Editor.Caret.Offset); - int max = Math.Max (ctx.TriggerOffset, localInfo.HiddenDocument.Editor.Caret.Offset); - return localInfo.HiddenDocument.Editor.Document.GetTextBetween (min, max); + int min = Math.Min (ctx.TriggerOffset, localInfo.HiddenDocument.Editor.CaretOffset); + int max = Math.Max (ctx.TriggerOffset, localInfo.HiddenDocument.Editor.CaretOffset); + return localInfo.HiddenDocument.Editor.GetTextBetween (min, max); } public void SetCompletionText (CodeCompletionContext ctx, string partial_word, string complete_word) @@ -249,7 +255,7 @@ namespace MonoDevelop.CSharp.Completion CodeCompletionContext translatedCtx = new CodeCompletionContext (); int offset = localInfo.OriginalCaretPosition + ctx.TriggerOffset - localInfo.CaretPosition; translatedCtx.TriggerOffset = offset; - DocumentLocation loc = localInfo.HiddenDocument.Editor.Document.OffsetToLocation (offset); + var loc = localInfo.HiddenDocument.Editor.OffsetToLocation (offset); translatedCtx.TriggerLine = loc.Line; translatedCtx.TriggerLineOffset = loc.Column - 1; translatedCtx.TriggerWordLength = ctx.TriggerWordLength; @@ -258,13 +264,16 @@ namespace MonoDevelop.CSharp.Completion public int CaretOffset { get { - return localInfo.HiddenDocument.Editor.Caret.Offset; + return localInfo.HiddenDocument.Editor.CaretOffset; + } + set { + localInfo.HiddenDocument.Editor.CaretOffset = value; } } public int TextLength { get { - return localInfo.HiddenDocument.Editor.Document.TextLength; + return localInfo.HiddenDocument.Editor.Length; } } @@ -279,28 +288,33 @@ namespace MonoDevelop.CSharp.Completion return Gtk.Widget.DefaultStyle; } } + + void ICompletionWidget.AddSkipChar (int cursorPosition, char c) + { + // ignore + } #endregion } - - public ParsedDocument BuildDocument (DocumentInfo info, TextEditorData data) + + ParsedDocument ILanguageCompletionBuilder.BuildDocument (DocumentInfo info, MonoDevelop.Ide.Editor.TextEditor data) { var docStr = BuildDocumentString (info, data); return Parse (info.AspNetDocument.FileName, docStr); } - public string BuildDocumentString (DocumentInfo info, TextEditorData data, List<LocalDocumentInfo.OffsetInfo> offsetInfos = null, bool buildExpressions = false) + public string BuildDocumentString (DocumentInfo info, MonoDevelop.Ide.Editor.TextEditor data, List<LocalDocumentInfo.OffsetInfo> offsetInfos = null, bool buildExpressions = false) { var document = new StringBuilder (); WriteUsings (info.Imports, document); foreach (var node in info.XScriptBlocks) { - var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; - var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; + var start = data.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; + var end = data.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (offsetInfos != null) offsetInfos.Add (new LocalDocumentInfo.OffsetInfo (start, document.Length, end - start)); - document.AppendLine (data.Document.GetTextBetween (start, end)); + document.AppendLine (data.GetTextBetween (start, end)); } if (buildExpressions) { WriteClassDeclaration (info, document); @@ -312,8 +326,8 @@ namespace MonoDevelop.CSharp.Completion foreach (var node in info.XExpressions) { bool isBlock = node is WebFormsRenderBlock; - var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; - var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; + var start = data.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; + var end = data.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (!isBlock) { document.Append ("WriteLine ("); @@ -335,3 +349,4 @@ namespace MonoDevelop.CSharp.Completion } } } +*/
\ No newline at end of file |