Browse Source

Add basic C# Razor completion for WebViewPage members.

Dot completion now shows members of the WebViewPage class which is the base class of Razor view pages.
pull/28/head
Matt Ward 14 years ago
parent
commit
ebbc850754
  1. 49
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpDotCompletionDataProvider.cs

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

@ -14,10 +14,53 @@ namespace ICSharpCode.AspNet.Mvc.Completion @@ -14,10 +14,53 @@ namespace ICSharpCode.AspNet.Mvc.Completion
{
public override ResolveResult Resolve(ITextEditor editor, ExpressionResult expressionResult)
{
NRefactoryResolver resolver = CreateResolver(editor);
ParseInformation parseInfo = ParserService.GetParseInformation(editor.FileName);
NRefactoryResolver resolver = new NRefactoryResolver(LanguageProperties.CSharp);
resolver.LimitMethodExtractionUntilLine = editor.Caret.Line;
return resolver.Resolve(expressionResult, parseInfo, editor.Document.Text);
ParseInformation parseInfoWithWebViewPageClass = CreateParseInformationWithWebViewPageClass(parseInfo);
expressionResult.Region = GetRegionInMiddleOfWebViewPageClass();
return resolver.Resolve(expressionResult, parseInfoWithWebViewPageClass, editor.Document.Text);
}
NRefactoryResolver CreateResolver(ITextEditor editor)
{
return new NRefactoryResolver(LanguageProperties.CSharp) {
LimitMethodExtractionUntilLine = editor.Caret.Line
};
}
ParseInformation CreateParseInformationWithWebViewPageClass(ParseInformation parseInfo)
{
var compilationUnit = new DefaultCompilationUnit(parseInfo.CompilationUnit.ProjectContent);
AddWebViewPageClass(compilationUnit);
return new ParseInformation(compilationUnit);
}
void AddWebViewPageClass(DefaultCompilationUnit compilationUnit)
{
DefaultClass webViewPageClass = CreateWebViewPageClass(compilationUnit);
compilationUnit.Classes.Add(webViewPageClass);
}
DefaultClass CreateWebViewPageClass(ICompilationUnit compilationUnit)
{
var webViewPageClass = new DefaultClass(compilationUnit, "RazorWebViewPage") {
Region = new DomRegion(1, 0, 3, 0)
};
AddWebViewPageBaseClass(webViewPageClass);
return webViewPageClass;
}
void AddWebViewPageBaseClass(DefaultClass webViewPageClass)
{
IClass webViewPageBaseClass = webViewPageClass.ProjectContent.GetClass("System.Web.Mvc.WebViewPage", 0);
if (webViewPageBaseClass != null) {
webViewPageClass.BaseTypes.Add(webViewPageBaseClass.DefaultReturnType);
}
}
DomRegion GetRegionInMiddleOfWebViewPageClass()
{
return new DomRegion(2, 0, 2, 0);
}
}
}

Loading…
Cancel
Save