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