[mono/monodevelop] 77090337: [CSharpBinding] Polished up protocol completion data.

Mike Krüger ([email protected]) <[email protected]>
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <0000014196f3744c-01f0f2b6-9c66-4d11-89c0-4738db83e07b-000000@email.amazonses.com>
   Branch: refs/heads/master
     Home: https://github.com/mono/monodevelop
  Compare: https://github.com/mono/monodevelop/compare/64c238e72e7e...770903378793

   Commit: 770903378793d81a4e6f80ddcbf634ab105aa54b
   Author: Mike Krüger <[email protected]> (mkrueger)
     Date: 2013-10-08 07:22:35 GMT
      URL: https://github.com/mono/monodevelop/commit/770903378793d81a4e6f80ddcbf634ab105aa54b

[CSharpBinding] Polished up protocol completion data.

Changed paths:
  M main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/ExportCodeGenerator.cs
  M main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/MonoCSharpCompletionEngine.cs
  M main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/ProtocolCompletionData.cs
  M main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/MDRefactoringContext.cs

Modified: main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/ExportCodeGenerator.cs
===================================================================
@@ -202,7 +202,7 @@ internal static string GenerateMemberCode (MDRefactoringContext ctx, TypeSystemA
 						GenerateExportAttribute (ctx, member)
 					}
 				});
-				return method.ToString ();
+				return method.ToString (ctx.FormattingOptions);
 			}
 			var property = builder.ConvertEntity (member) as PropertyDeclaration;
 			if (property == null)
@@ -237,7 +237,7 @@ internal static string GenerateMemberCode (MDRefactoringContext ctx, TypeSystemA
 					}
 				});
 			}
-			return property.ToString ();
+			return property.ToString (ctx.FormattingOptions);
 		}
 	}
 

Modified: main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/MonoCSharpCompletionEngine.cs
===================================================================
@@ -29,16 +29,33 @@
 using MonoDevelop.CodeGeneration;
 using ICSharpCode.NRefactory.TypeSystem;
 using System.Linq;
+using MonoDevelop.CSharp.Refactoring.CodeActions;
+using ICSharpCode.NRefactory.Editor;
 
 namespace MonoDevelop.CSharp.Completion
 {
 	class MonoCSharpCompletionEngine : CSharpCompletionEngine
 	{
-		CSharpCompletionTextEditorExtension ext;
+		readonly CSharpCompletionTextEditorExtension ext;
+		readonly MDRefactoringContext mdRefactoringCtx;
+
+		public CSharpCompletionTextEditorExtension Ext {
+			get {
+				return ext;
+			}
+		}
+
+		public MDRefactoringContext MDRefactoringCtx {
+			get {
+				return mdRefactoringCtx;
+			}
+		}
 
 		public MonoCSharpCompletionEngine (CSharpCompletionTextEditorExtension ext, ICSharpCode.NRefactory.Editor.IDocument document, ICompletionContextProvider completionContextProvider, ICompletionDataFactory factory, ICSharpCode.NRefactory.TypeSystem.IProjectContent content, ICSharpCode.NRefactory.CSharp.TypeSystem.CSharpTypeResolveContext ctx) : base (document, completionContextProvider, factory, content, ctx)
 		{
 			this.ext = ext;
+			this.mdRefactoringCtx = MDRefactoringContext.Create (ext.Document, ext.Document.Editor.Caret.Location);
+
 		}
 
 		protected override void AddVirtuals (List<IMember> alreadyInserted, CompletionDataWrapper col, string modifiers, IType curType, int declarationBegin)
@@ -48,7 +65,7 @@ protected override void AddVirtuals (List<IMember> alreadyInserted, CompletionDa
 				if (alreadyInserted.Contains (member))
 					continue;
 				alreadyInserted.Add (member);
-				var data = new ProtocolCompletionData (ext, declarationBegin, this.currentType, member);
+				var data = new ProtocolCompletionData (this, declarationBegin, member);
 				col.Add (data);
 			}
 		}

Modified: main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/ProtocolCompletionData.cs
===================================================================
@@ -27,31 +27,27 @@
 using ICSharpCode.NRefactory.TypeSystem;
 using MonoDevelop.Ide.CodeCompletion;
 using MonoDevelop.Ide.TypeSystem;
-using System.Linq;
 using MonoDevelop.CodeGeneration;
-using MonoDevelop.CSharp.Refactoring.CodeActions;
 
 namespace MonoDevelop.CSharp.Completion
 {
-	public class ProtocolCompletionData : CompletionData
+	class ProtocolCompletionData : CompletionData
 	{
-		CSharpCompletionTextEditorExtension ext;
-		IMember member;
-		static Ambience ambience = new CSharpAmbience ();
-		int    declarationBegin;
-		IUnresolvedTypeDefinition  type;
+		readonly MonoCSharpCompletionEngine engine;
+		readonly IMember member;
+		readonly static Ambience ambience = new CSharpAmbience ();
+		readonly int    declarationBegin;
 
 		public bool GenerateBody { get; set; }
 
 		public override TooltipInformation CreateTooltipInformation (bool smartWrap)
 		{
-			return MemberCompletionData.CreateTooltipInformation (ext, null, member, smartWrap);
+			return MemberCompletionData.CreateTooltipInformation (engine.Ext, null, member, smartWrap);
 		}
 
-		public ProtocolCompletionData (CSharpCompletionTextEditorExtension ext, int declarationBegin, IUnresolvedTypeDefinition type, IMember member) : base (null)
+		public ProtocolCompletionData (MonoCSharpCompletionEngine engine, int declarationBegin, IMember member) : base (null)
 		{
-			this.ext = ext;
-			this.type   = type;
+			this.engine = engine;
 			this.member = member;
 
 			this.declarationBegin = declarationBegin;
@@ -63,38 +59,29 @@ public ProtocolCompletionData (CSharpCompletionTextEditorExtension ext, int decl
 
 		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
 		{
+			var ext = engine.Ext;
 			var editor = ext.TextEditorData;
 			var generator = CodeGenerator.CreateGenerator (ext.Document);
-			bool isExplicit = false;
-			if (member.DeclaringTypeDefinition.Kind == TypeKind.Interface) {
-				foreach (var m in type.Members) {
-					if (m.Name == member.Name && !m.ReturnType.Equals (member.ReturnType)) {
-						isExplicit = true;
-						break;
-					}
-				}
-			}
-			var resolvedType = type.Resolve (ext.Project).GetDefinition ();
 			if (ext.Project != null)
 				generator.PolicyParent = ext.Project.Policies;
-			var ctx = MDRefactoringContext.Create (ext.Document, ext.Document.Editor.Caret.Location);
-			if (ctx == null)
-				return;
-			var builder = ctx.CreateTypeSystemAstBuilder ();
+			var builder = engine.MDRefactoringCtx.CreateTypeSystemAstBuilder ();
 
-			string sb = BaseExportCodeGenerator.GenerateMemberCode (ctx, builder, member);
+			string sb = BaseExportCodeGenerator.GenerateMemberCode (engine.MDRefactoringCtx, builder, member);
 			sb = sb.TrimEnd ();
 
-			//	var lastRegion = result.BodyRegions.LastOrDefault ();
-			//targetCaretPosition = declarationBegin + sb.Length;
+			string indent = editor.GetIndentationString (editor.Caret.Location); 
+			sb = sb.Replace (editor.EolMarker, editor.EolMarker + indent);
+
+			int targetCaretPosition = sb.LastIndexOf ("throw", StringComparison.Ordinal);
+			int selectionEndPosition = sb.LastIndexOf (";", StringComparison.Ordinal);
 
 			editor.Replace (declarationBegin, editor.Caret.Offset - declarationBegin, sb);
-			/*			if (selectionEndPosition > 0) {
+			if (selectionEndPosition > 0) {
+				targetCaretPosition += declarationBegin;
+				selectionEndPosition += declarationBegin;
 				editor.Caret.Offset = selectionEndPosition;
 				editor.SetSelection (targetCaretPosition, selectionEndPosition);
-			} else {
-				editor.Caret.Offset = targetCaretPosition;
-			}*/
+			}
 		}
 	}
 }

Modified: main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/MDRefactoringContext.cs
===================================================================
@@ -173,6 +173,12 @@ internal void SetLocation (TextLocation loc)
 
 		readonly CSharpFormattingOptions formattingOptions;
 
+		public CSharpFormattingOptions FormattingOptions {
+			get {
+				return formattingOptions;
+			}
+		}
+
 		public Script StartScript ()
 		{
 			return new MDRefactoringScript (this, formattingOptions);
_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.