1 //
2 // System.Web.Compilation.UserControlCompiler
3 //
4 // Authors:
5 //	Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //
7 // (C) 2002,2003 Ximian, Inc (http://www.ximian.com)
8 //
9 
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 //
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 //
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 using System;
31 using System.CodeDom;
32 using System.Web.UI;
33 
34 namespace System.Web.Compilation
35 {
36 	class UserControlCompiler : TemplateControlCompiler
37 	{
38 		UserControlParser parser;
39 
UserControlCompiler(UserControlParser parser)40 		public UserControlCompiler (UserControlParser parser)
41 			: base (parser)
42 		{
43 			this.parser = parser;
44 		}
45 
CompileUserControlType(UserControlParser parser)46 		public static Type CompileUserControlType (UserControlParser parser)
47 		{
48 			UserControlCompiler pc = new UserControlCompiler (parser);
49 			return pc.GetCompiledType ();
50 		}
51 
AddClassAttributes()52 		protected override void AddClassAttributes ()
53 		{
54 			if (parser.OutputCache)
55 				AddOutputCacheAttribute ();
56 		}
57 
CreateMethods()58 		protected internal override void CreateMethods ()
59 		{
60 			base.CreateMethods ();
61 			CreateProfileProperty ();
62 		}
63 
AddOutputCacheAttribute()64 		void AddOutputCacheAttribute ()
65 		{
66 			CodeAttributeDeclaration cad;
67 			cad = new CodeAttributeDeclaration ("System.Web.UI.PartialCachingAttribute");
68 			CodeAttributeArgumentCollection arguments = cad.Arguments;
69 
70 			AddPrimitiveArgument (arguments, parser.OutputCacheDuration);
71 			AddPrimitiveArgument (arguments, parser.OutputCacheVaryByParam);
72 			AddPrimitiveArgument (arguments, parser.OutputCacheVaryByControls);
73 			AddPrimitiveArgument (arguments, parser.OutputCacheVaryByCustom);
74 			AddPrimitiveArgument (arguments, parser.OutputCacheSqlDependency);
75 			AddPrimitiveArgument (arguments, parser.OutputCacheShared);
76 			arguments.Add (new CodeAttributeArgument ("ProviderName", new CodePrimitiveExpression (parser.ProviderName)));
77 			mainClass.CustomAttributes.Add (cad);
78 		}
79 
AddPrimitiveArgument(CodeAttributeArgumentCollection arguments, object obj)80 		void AddPrimitiveArgument (CodeAttributeArgumentCollection arguments, object obj)
81 		{
82 			arguments.Add (new CodeAttributeArgument (new CodePrimitiveExpression (obj)));
83 		}
84 
AddStatementsToInitMethodTop(ControlBuilder builder, CodeMemberMethod method)85 		protected override void AddStatementsToInitMethodTop (ControlBuilder builder, CodeMemberMethod method)
86 		{
87 			base.AddStatementsToInitMethodTop (builder, method);
88 			if (parser.MasterPageFile != null) {
89 				CodeExpression prop;
90 				prop = new CodePropertyReferenceExpression (new CodeArgumentReferenceExpression("__ctrl"), "MasterPageFile");
91 				CodeExpression ct = new CodePrimitiveExpression (parser.MasterPageFile);
92 				method.Statements.Add (AddLinePragma (new CodeAssignStatement (prop, ct), parser.DirectiveLocation));
93 			}
94 		}
95 	}
96 }
97 
98