diff options
-rw-r--r-- | main/src/addins/AspNetAddIn/ChangeLog | 5 | ||||
-rw-r--r-- | main/src/addins/AspNetAddIn/MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs | 63 |
2 files changed, 59 insertions, 9 deletions
diff --git a/main/src/addins/AspNetAddIn/ChangeLog b/main/src/addins/AspNetAddIn/ChangeLog index 57dfd10fcf..d14e8c9fa5 100644 --- a/main/src/addins/AspNetAddIn/ChangeLog +++ b/main/src/addins/AspNetAddIn/ChangeLog @@ -1,5 +1,10 @@ 2008-10-16 Michael Hutchinson <mhutchinson@novell.com> + * MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs: Add simple + field/property completions in render and databinding expressions. + +2008-10-16 Michael Hutchinson <mhutchinson@novell.com> + * MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs: Finally fix event handler completion with the new MD Code DOM. diff --git a/main/src/addins/AspNetAddIn/MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs b/main/src/addins/AspNetAddIn/MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs index fb469aa8dc..60249a4959 100644 --- a/main/src/addins/AspNetAddIn/MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs +++ b/main/src/addins/AspNetAddIn/MonoDevelop.AspNet.Gui/AspNetEditorExtension.cs @@ -109,6 +109,17 @@ namespace MonoDevelop.AspNet.Gui return list; } + //simple completion for ASP.NET expressions + if (Tracker.Engine.CurrentState is AspNetExpressionState + && previousChar == ' ' && char.IsLetter (currentChar)) + { + AspNetExpression expr = Tracker.Engine.Nodes.Peek () as AspNetExpression; + CompletionDataList list = HandleExpressionCompletion (expr); + if (list != null && !forced) + triggerWordLength = 1; + return list; + } + DocType = AspCU != null ? AspCU.PageInfo.DocType : null; return base.HandleCodeCompletion (completionContext, forced, ref triggerWordLength); @@ -168,6 +179,46 @@ namespace MonoDevelop.AspNet.Gui } } + CompletionDataList HandleExpressionCompletion (AspNetExpression expr) + { + if (!(expr is AspNetDataBindingExpression || expr is AspNetRenderExpression)) + return null; + + MonoDevelop.Projects.Dom.IType codeBehindClass; + MonoDevelop.Projects.Dom.Parser.ProjectDom projectDatabase; + GetCodeBehind (AspCU, out codeBehindClass, out projectDatabase); + + if (codeBehindClass == null) + return null; + + //list just the class's properties, not properties on base types + CompletionDataList list = new CompletionDataList (); + list.AddRange (from p in codeBehindClass.Properties + where p.IsProtected || p.IsPublic + select new CompletionData (p.Name, "md-property")); + list.AddRange (from p in codeBehindClass.Fields + where p.IsProtected || p.IsPublic + select new CompletionData (p.Name, "md-property")); + + return list.Count > 0? list : null; + } + + static void GetCodeBehind (AspNetParsedDocument cu, + out MonoDevelop.Projects.Dom.IType codeBehindClass, + out MonoDevelop.Projects.Dom.Parser.ProjectDom projectDatabase) + { + codeBehindClass = null; + projectDatabase = null; + + if (cu != null && cu.Document.Project != null) { + projectDatabase = MonoDevelop.Projects.Dom.Parser.ProjectDomService.GetProjectDom + (cu.Document.Project); + + if (projectDatabase != null && !string.IsNullOrEmpty (cu.PageInfo.InheritedClass)) + codeBehindClass = projectDatabase.GetType (cu.PageInfo.InheritedClass, false, false); + } + } + #region ASP.NET data static void AddAspBeginExpressions (CompletionDataList list, Document doc) @@ -263,15 +314,9 @@ namespace MonoDevelop.AspNet.Gui } //find the codebehind class - MonoDevelop.Projects.Dom.IType codeBehindClass = null; - MonoDevelop.Projects.Dom.Parser.ProjectDom projectDatabase = null; - if (cu != null && cu.Document.Project != null) { - projectDatabase = MonoDevelop.Projects.Dom.Parser.ProjectDomService.GetProjectDom - (cu.Document.Project); - - if (projectDatabase != null && !string.IsNullOrEmpty (cu.PageInfo.InheritedClass)) - codeBehindClass = projectDatabase.GetType (cu.PageInfo.InheritedClass, false, false); - } + MonoDevelop.Projects.Dom.IType codeBehindClass; + MonoDevelop.Projects.Dom.Parser.ProjectDom projectDatabase; + GetCodeBehind (cu, out codeBehindClass, out projectDatabase); //if it's an event, suggest compatible methods if (codeBehindClass != null && attName.Name.StartsWith ("On")) { |