Browse Source

Add C# Razor completion for MVC helper methods.

Use WebViewPage<dynamic> as Razor view's base class.
Add default namespaces for the Razor view class so extension methods show in completion:
  System.Web.Mvc,
  System.Web.Mvc.Ajax,
  System.Web.Mvc.Html,
  System.Web.Routing

The Razor view's base class and namespaces should be taken from the web.config but are currently hard coded.
pull/28/head
Matt Ward 13 years ago
parent
commit
e5836be58e
  1. 35
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpDotCompletionDataProvider.cs

35
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpDotCompletionDataProvider.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
@ -31,10 +32,32 @@ namespace ICSharpCode.AspNet.Mvc.Completion @@ -31,10 +32,32 @@ namespace ICSharpCode.AspNet.Mvc.Completion
ParseInformation CreateParseInformationWithWebViewPageClass(ParseInformation parseInfo)
{
var compilationUnit = new DefaultCompilationUnit(parseInfo.CompilationUnit.ProjectContent);
AddDefaultUsings(compilationUnit);
AddWebViewPageClass(compilationUnit);
return new ParseInformation(compilationUnit);
}
void AddDefaultUsings(ICompilationUnit compilationUnit)
{
AddUsing("System.Web.Mvc", compilationUnit);
AddUsing("System.Web.Mvc.Ajax", compilationUnit);
AddUsing("System.Web.Mvc.Html", compilationUnit);
AddUsing("System.Web.Routing", compilationUnit);
}
void AddUsing(string name, ICompilationUnit compilationUnit)
{
DefaultUsing defaultUsing = CreateUsing(name, compilationUnit.ProjectContent);
compilationUnit.UsingScope.Usings.Add(defaultUsing);
}
DefaultUsing CreateUsing(string namespaceName, IProjectContent projectContent)
{
var defaultUsing = new DefaultUsing(projectContent);
defaultUsing.Usings.Add(namespaceName);
return defaultUsing;
}
void AddWebViewPageClass(DefaultCompilationUnit compilationUnit)
{
DefaultClass webViewPageClass = CreateWebViewPageClass(compilationUnit);
@ -52,12 +75,20 @@ namespace ICSharpCode.AspNet.Mvc.Completion @@ -52,12 +75,20 @@ namespace ICSharpCode.AspNet.Mvc.Completion
void AddWebViewPageBaseClass(DefaultClass webViewPageClass)
{
IClass webViewPageBaseClass = webViewPageClass.ProjectContent.GetClass("System.Web.Mvc.WebViewPage", 0);
IClass webViewPageBaseClass = webViewPageClass.ProjectContent.GetClass("System.Web.Mvc.WebViewPage", 1);
if (webViewPageBaseClass != null) {
webViewPageClass.BaseTypes.Add(webViewPageBaseClass.DefaultReturnType);
IReturnType returnType = GetWebViewPageBaseClassReturnType(webViewPageBaseClass);
webViewPageClass.BaseTypes.Add(returnType);
}
}
IReturnType GetWebViewPageBaseClassReturnType(IClass webViewPageBaseClass)
{
var typeArguments = new List<IReturnType>();
typeArguments.Add(new DynamicReturnType(webViewPageBaseClass.ProjectContent));
return new ConstructedReturnType(webViewPageBaseClass.DefaultReturnType, typeArguments);
}
DomRegion GetRegionInMiddleOfWebViewPageClass()
{
return new DomRegion(2, 0, 2, 0);

Loading…
Cancel
Save