Browse Source

reimplement support for @model ModelTypeName

pull/520/merge
Siegfried Pammer 11 years ago
parent
commit
d68d301519
  1. 29
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpCompletionBinding.cs
  2. 62
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpModelTypeLocater.cs

29
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpCompletionBinding.cs

@ -18,9 +18,12 @@
using System; using System;
using System.IO; using System.IO;
using System.Web.Razor;
using ICSharpCode.NRefactory; using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.CSharp.TypeSystem; using ICSharpCode.NRefactory.CSharp.TypeSystem;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
@ -82,7 +85,7 @@ namespace ICSharpCode.AspNet.Mvc.Completion
var currentTypeDefinition = new DefaultUnresolvedTypeDefinition(project.RootNamespace, Path.GetFileNameWithoutExtension(editor.FileName)); var currentTypeDefinition = new DefaultUnresolvedTypeDefinition(project.RootNamespace, Path.GetFileNameWithoutExtension(editor.FileName));
ITypeReference baseTypeReference = new GetClassTypeReference("System.Web.Mvc", "WebViewPage", 1); ITypeReference baseTypeReference = new GetClassTypeReference("System.Web.Mvc", "WebViewPage", 1);
baseTypeReference = new ParameterizedTypeReference(baseTypeReference, new[] { KnownTypeReference.Object }); baseTypeReference = new ParameterizedTypeReference(baseTypeReference, new[] { FindModelType(editor) });
currentTypeDefinition.BaseTypes.Add(baseTypeReference); currentTypeDefinition.BaseTypes.Add(baseTypeReference);
var currentMethod = new DefaultUnresolvedMethod(currentTypeDefinition, "__ContextStub__"); var currentMethod = new DefaultUnresolvedMethod(currentTypeDefinition, "__ContextStub__");
@ -112,6 +115,30 @@ namespace ICSharpCode.AspNet.Mvc.Completion
currentMethod.CreateResolved(resolveContext.WithCurrentTypeDefinition(currentResolvedTypeDef))); currentMethod.CreateResolved(resolveContext.WithCurrentTypeDefinition(currentResolvedTypeDef)));
return new CSharpResolver(context); return new CSharpResolver(context);
} }
ITypeReference FindModelType(ITextEditor editor)
{
ParserResults results = ParseTemplate(editor.Document);
string typeName = GetModelTypeName(results);
if (string.IsNullOrWhiteSpace(typeName))
return KnownTypeReference.Object;
return new CSharpParser().ParseTypeReference(typeName)
.ToTypeReference(NameLookupMode.BaseTypeReference);
}
ParserResults ParseTemplate(ITextSource textBuffer)
{
var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
var engine = new RazorTemplateEngine(host);
return engine.ParseTemplate(textBuffer.CreateReader());
}
string GetModelTypeName(ParserResults results)
{
var visitor = new RazorCSharpParserModelTypeVisitor();
results.Document.Accept(visitor);
return visitor.ModelTypeName;
}
} }
static class NRUtils static class NRUtils

62
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpModelTypeLocater.cs

@ -16,34 +16,34 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
//using System; using System;
//using System.Web.Razor; using System.Web.Razor;
//using ICSharpCode.SharpDevelop; using ICSharpCode.NRefactory.Editor;
//
//namespace ICSharpCode.AspNet.Mvc.Completion namespace ICSharpCode.AspNet.Mvc.Completion
//{ {
// public class RazorCSharpModelTypeLocater public class RazorCSharpModelTypeLocater
// { {
// public RazorCSharpModelTypeLocater(ITextBuffer textBuffer) public RazorCSharpModelTypeLocater(ITextSource textBuffer)
// { {
// ParserResults results = ParseTemplate(textBuffer); ParserResults results = ParseTemplate(textBuffer);
// ModelTypeName = GetModelTypeName(results); ModelTypeName = GetModelTypeName(results);
// } }
//
// ParserResults ParseTemplate(ITextBuffer textBuffer) ParserResults ParseTemplate(ITextSource textBuffer)
// { {
// var host = new RazorEngineHost(new CSharpRazorCodeLanguage()); var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
// var engine = new RazorTemplateEngine(host); var engine = new RazorTemplateEngine(host);
// return engine.ParseTemplate(textBuffer.CreateReader()); return engine.ParseTemplate(textBuffer.CreateReader());
// } }
//
// string GetModelTypeName(ParserResults results) string GetModelTypeName(ParserResults results)
// { {
// var visitor = new RazorCSharpParserModelTypeVisitor(); var visitor = new RazorCSharpParserModelTypeVisitor();
// results.Document.Accept(visitor); results.Document.Accept(visitor);
// return visitor.ModelTypeName; return visitor.ModelTypeName;
// } }
//
// public string ModelTypeName { get; private set; } public string ModelTypeName { get; private set; }
// } }
//} }

Loading…
Cancel
Save