PageCompiler.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // System.Web.Compilation.PageCompiler
  3. //
  4. // Authors:
  5. // Gonzalo Paniagua Javier ([email protected])
  6. //
  7. // (C) 2002,2003 Ximian, Inc (http://www.ximian.com)
  8. //
  9. using System;
  10. using System.CodeDom;
  11. using System.IO;
  12. using System.Reflection;
  13. using System.Text;
  14. using System.Web.UI;
  15. using System.Web.SessionState;
  16. using System.Web.Util;
  17. namespace System.Web.Compilation
  18. {
  19. class PageCompiler : TemplateControlCompiler
  20. {
  21. PageParser pageParser;
  22. static CodeTypeReference intRef = new CodeTypeReference (typeof (int));
  23. public PageCompiler (PageParser pageParser)
  24. : base (pageParser)
  25. {
  26. this.pageParser = pageParser;
  27. }
  28. protected override void AddInterfaces ()
  29. {
  30. base.AddInterfaces ();
  31. if (pageParser.EnableSessionState)
  32. mainClass.BaseTypes.Add (new CodeTypeReference (typeof(IRequiresSessionState)));
  33. if (pageParser.ReadOnlySessionState)
  34. mainClass.BaseTypes.Add (new CodeTypeReference (typeof (IReadOnlySessionState)));
  35. }
  36. void CreateGetTypeHashCode ()
  37. {
  38. CodeMemberMethod method = new CodeMemberMethod ();
  39. method.ReturnType = intRef;
  40. method.Name = "GetTypeHashCode";
  41. method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
  42. Random rnd = new Random (pageParser.InputFile.GetHashCode ());
  43. method.Statements.Add (new CodeMethodReturnStatement (new CodePrimitiveExpression (rnd.Next ())));
  44. mainClass.Members.Add (method);
  45. }
  46. protected override void CreateMethods ()
  47. {
  48. base.CreateMethods ();
  49. CreateGetTypeHashCode ();
  50. }
  51. public static Type CompilePageType (PageParser pageParser)
  52. {
  53. PageCompiler compiler = new PageCompiler (pageParser);
  54. return compiler.GetCompiledType ();
  55. }
  56. }
  57. }