diff options
Diffstat (limited to 'main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/AbstractGenerateAction.cs')
-rw-r--r-- | main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/AbstractGenerateAction.cs | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/AbstractGenerateAction.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/AbstractGenerateAction.cs index 12fcc3a87d..13234fff9e 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/AbstractGenerateAction.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/AbstractGenerateAction.cs @@ -31,18 +31,22 @@ using Gtk; using System.Collections.Generic; using MonoDevelop.Refactoring; using MonoDevelop.Ide; -using ICSharpCode.NRefactory.TypeSystem; using MonoDevelop.Ide.TypeSystem; using MonoDevelop.Components; +using Microsoft.CodeAnalysis; +using MonoDevelop.Ide.Editor; +using MonoDevelop.Core.Text; +using MonoDevelop.CSharp.Completion; +using MonoDevelop.CSharp.Formatting; namespace MonoDevelop.CodeGeneration { - public abstract class AbstractGenerateAction : IGenerateAction + abstract class AbstractGenerateAction : IGenerateAction { readonly TreeStore store = new TreeStore (typeof(bool), typeof(Xwt.Drawing.Image), typeof(string), typeof(object)); readonly CodeGenerationOptions options; - public CodeGenerationOptions Options { + internal CodeGenerationOptions Options { get { return options; } @@ -76,23 +80,18 @@ namespace MonoDevelop.CodeGeneration column.Expand = true; treeView.AppendColumn (column); - Ambience ambience = AmbienceService.GetAmbienceForFile (options.Document.FileName); foreach (object obj in GetValidMembers ()) { - var member = obj as IEntity; + var member = obj as ISymbol; if (member != null) { - Store.AppendValues (false, ImageService.GetIcon (member.GetStockIcon (), IconSize.Menu), ambience.GetString (member, OutputFlags.ClassBrowserEntries), member); + Store.AppendValues (false, ImageService.GetIcon (member.GetStockIcon (), IconSize.Menu), member.ToDisplayString (Ambience.LabelFormat), member); continue; } - var tuple = obj as Tuple<IMember, bool>; + var tuple = obj as Tuple<ISymbol, bool>; if (tuple != null) { - Store.AppendValues (false, ImageService.GetIcon (tuple.Item1.GetStockIcon (), IconSize.Menu), ambience.GetString (tuple.Item1, OutputFlags.ClassBrowserEntries), tuple); + Store.AppendValues (false, ImageService.GetIcon (tuple.Item1.GetStockIcon (), IconSize.Menu), tuple.Item1.ToDisplayString (Ambience.LabelFormat), tuple); continue; } - - var variable = obj as IVariable; - if (variable != null) - Store.AppendValues (false, ImageService.GetIcon (variable.GetStockIcon (), IconSize.Menu), variable.Name, variable); } treeView.Model = store; @@ -118,10 +117,9 @@ namespace MonoDevelop.CodeGeneration static string AddIndent (string text, string indent) { - var doc = new Mono.TextEditor.TextDocument (); - doc.Text = text; + var doc = TextEditorFactory.CreateNewReadonlyDocument (new StringTextSource (text), ""); var result = new StringBuilder (); - foreach (var line in doc.Lines) { + foreach (var line in doc.GetLines ()) { result.Append (indent); result.Append (doc.GetTextAt (line.SegmentIncludingDelimiter)); } @@ -141,7 +139,7 @@ namespace MonoDevelop.CodeGeneration } while (store.IterNext (ref iter)); var output = new StringBuilder (); - string indent = RefactoringOptions.GetIndent (options.Document, (IEntity)options.EnclosingMember ?? options.EnclosingType) + "\t"; + string indent = options.Editor.GetVirtualIndentationString (options.Editor.CaretLine); foreach (string nodeText in GenerateCode (includedMembers)) { if (output.Length > 0) { output.AppendLine (); @@ -151,8 +149,14 @@ namespace MonoDevelop.CodeGeneration } if (output.Length > 0) { - var data = options.Document.Editor; - data.InsertAtCaret (output.ToString ().TrimStart ()); + var data = options.Editor; + data.EnsureCaretIsNotVirtual (); + int offset = data.CaretOffset; + var text = output.ToString ().TrimStart (); + using (var undo = data.OpenUndoGroup ()) { + data.InsertAtCaret (text); + OnTheFlyFormatter.Format (data, options.DocumentContext, offset, offset + text.Length); + } } } } |