void AssignPropertyWithExpression <T> (CodeMemberMethod method, string name, MainDirectiveAttribute <T> value, ILocation location) { if (value == null) { return; } CodeAssignStatement assign; CodeExpression rhs = null; if (value.IsExpression) { var pi = GetFieldOrProperty(typeof(Page), name) as PropertyInfo; if (pi != null) { rhs = CompileExpression(pi, pi.PropertyType, value.UnparsedValue, false); } } if (rhs != null) { assign = CreatePropertyAssign(thisRef, name, rhs); } else { assign = CreatePropertyAssign(name, value.Value); } method.Statements.Add(AddLinePragma(assign, location)); }
protected override void CreateConstructor(CodeStatementCollection localVars, CodeStatementCollection trueStmt) { MainDirectiveAttribute <string> masterPageFile = pageParser.MasterPageFile; if (masterPageFile != null && !masterPageFile.IsExpression) { // This is here just to trigger master page build, so that its type // is available when compiling the page itself. BuildManager.GetCompiledType(masterPageFile.Value); } MainDirectiveAttribute <string> clientTarget; clientTarget = pageParser.ClientTarget; if (clientTarget != null) { CodeExpression prop; prop = new CodePropertyReferenceExpression(thisRef, "ClientTarget"); CodeExpression ct = null; if (clientTarget.IsExpression) { var pi = GetFieldOrProperty(typeof(Page), "ClientTarget") as PropertyInfo; if (pi != null) { ct = CompileExpression(pi, pi.PropertyType, clientTarget.UnparsedValue, false); } } if (ct == null) { ct = new CodePrimitiveExpression(clientTarget.Value); } if (localVars == null) { localVars = new CodeStatementCollection(); } localVars.Add(new CodeAssignStatement(prop, ct)); } List <string> deps = pageParser.Dependencies; int depsCount = deps != null ? deps.Count : 0; if (depsCount > 0) { if (localVars == null) { localVars = new CodeStatementCollection(); } if (trueStmt == null) { trueStmt = new CodeStatementCollection(); } CodeAssignStatement assign; localVars.Add( new CodeVariableDeclarationStatement( typeof(string[]), "dependencies") ); CodeVariableReferenceExpression dependencies = new CodeVariableReferenceExpression("dependencies"); trueStmt.Add( new CodeAssignStatement(dependencies, new CodeArrayCreateExpression(typeof(string), depsCount)) ); CodeArrayIndexerExpression arrayIndex; object o; for (int i = 0; i < depsCount; i++) { o = deps [i]; arrayIndex = new CodeArrayIndexerExpression(dependencies, new CodeExpression[] { new CodePrimitiveExpression(i) }); assign = new CodeAssignStatement(arrayIndex, new CodePrimitiveExpression(o)); trueStmt.Add(assign); } CodeMethodInvokeExpression getDepsCall = new CodeMethodInvokeExpression( thisRef, "GetWrappedFileDependencies", new CodeExpression[] { dependencies } ); assign = new CodeAssignStatement(GetMainClassFieldReferenceExpression("__fileDependencies"), getDepsCall); trueStmt.Add(assign); } base.CreateConstructor(localVars, trueStmt); }
internal override void LoadConfigDefaults () { base.LoadConfigDefaults (); PagesSection ps = PagesConfig; notBuffer = !ps.Buffer; enableSessionState = ps.EnableSessionState; enableViewStateMac = ps.EnableViewStateMac; smartNavigation = ps.SmartNavigation; validateRequest = ps.ValidateRequest; string value = ps.MasterPageFile; if (value.Length > 0) masterPage = new MainDirectiveAttribute <string> (value, true); enable_event_validation = ps.EnableEventValidation; maxPageStateFieldLength = ps.MaxPageStateFieldLength; value = ps.Theme; if (value.Length > 0) theme = new MainDirectiveAttribute <string> (value, true); styleSheetTheme = ps.StyleSheetTheme; if (styleSheetTheme.Length == 0) styleSheetTheme = null; maintainScrollPositionOnPostBack = ps.MaintainScrollPositionOnPostBack; }
internal override void ProcessMainAttributes (IDictionary atts) { // note: the 'enableSessionState' configuration property is // processed in a case-sensitive manner while the page-level // attribute is processed case-insensitive string enabless = GetString (atts, "EnableSessionState", null); if (enabless != null) { if (String.Compare (enabless, "readonly", true, Helpers.InvariantCulture) == 0) enableSessionState = PagesEnableSessionState.ReadOnly; else if (String.Compare (enabless, "true", true, Helpers.InvariantCulture) == 0) enableSessionState = PagesEnableSessionState.True; else if (String.Compare (enabless, "false", true, Helpers.InvariantCulture) == 0) enableSessionState = PagesEnableSessionState.False; else ThrowParseException ("Invalid value for enableSessionState: " + enabless); } string value = GetString (atts, "CodePage", null); if (value != null) { if (responseEncoding != null) ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive."); if (!BaseParser.IsExpression (value)) { int cpval = -1; try { cpval = (int) UInt32.Parse (value); } catch { ThrowParseException ("Invalid value for CodePage: " + value); } try { Encoding.GetEncoding (cpval); } catch { ThrowParseException ("Unsupported codepage: " + value); } codepage = new MainDirectiveAttribute <int> (cpval, true); } else codepage = new MainDirectiveAttribute <int> (value); } value = GetString (atts, "ResponseEncoding", null); if (value != null) { if (codepage != null) ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive."); if (!BaseParser.IsExpression (value)) { try { Encoding.GetEncoding (value); } catch { ThrowParseException ("Unsupported encoding: " + value); } responseEncoding = new MainDirectiveAttribute <string> (value, true); } else responseEncoding = new MainDirectiveAttribute <string> (value); } contentType = GetString (atts, "ContentType", null); value = GetString (atts, "LCID", null); if (value != null) { if (!BaseParser.IsExpression (value)) { int parsedLcid = -1; try { parsedLcid = (int) UInt32.Parse (value); } catch { ThrowParseException ("Invalid value for LCID: " + value); } CultureInfo ci = null; try { ci = new CultureInfo (parsedLcid); } catch { ThrowParseException ("Unsupported LCID: " + value); } if (ci.IsNeutralCulture) { string suggestedCulture = SuggestCulture (ci.Name); string fmt = "LCID attribute must be set to a non-neutral Culture."; if (suggestedCulture != null) { ThrowParseException (fmt + " Please try one of these: " + suggestedCulture); } else { ThrowParseException (fmt); } } lcid = new MainDirectiveAttribute <int> (parsedLcid, true); } else lcid = new MainDirectiveAttribute <int> (value); } culture = GetString (atts, "Culture", null); if (culture != null) { if (lcid != null) ThrowParseException ("Culture and LCID are mutually exclusive."); CultureInfo ci = null; try { if (!culture.StartsWith ("auto")) ci = new CultureInfo (culture); } catch { ThrowParseException ("Unsupported Culture: " + culture); } if (ci != null && ci.IsNeutralCulture) { string suggestedCulture = SuggestCulture (culture); string fmt = "Culture attribute must be set to a non-neutral Culture."; if (suggestedCulture != null) ThrowParseException (fmt + " Please try one of these: " + suggestedCulture); else ThrowParseException (fmt); } } uiculture = GetString (atts, "UICulture", null); if (uiculture != null) { CultureInfo ci = null; try { if (!uiculture.StartsWith ("auto")) ci = new CultureInfo (uiculture); } catch { ThrowParseException ("Unsupported Culture: " + uiculture); } if (ci != null && ci.IsNeutralCulture) { string suggestedCulture = SuggestCulture (uiculture); string fmt = "UICulture attribute must be set to a non-neutral Culture."; if (suggestedCulture != null) ThrowParseException (fmt + " Please try one of these: " + suggestedCulture); else ThrowParseException (fmt); } } string tracestr = GetString (atts, "Trace", null); if (tracestr != null) { haveTrace = true; atts ["Trace"] = tracestr; trace = GetBool (atts, "Trace", false); } string tracemodes = GetString (atts, "TraceMode", null); if (tracemodes != null) { bool valid = true; try { tracemode = (TraceMode) Enum.Parse (typeof (TraceMode), tracemodes, false); } catch { valid = false; } if (!valid || tracemode == TraceMode.Default) ThrowParseException ("The 'tracemode' attribute is case sensitive and must be " + "one of the following values: SortByTime, SortByCategory."); } errorPage = GetString (atts, "ErrorPage", null); validateRequest = GetBool (atts, "ValidateRequest", validateRequest); value = GetString (atts, "ClientTarget", null); if (value != null) { if (!BaseParser.IsExpression (value)) { value = value.Trim (); ClientTargetSection sec = GetConfigSection <ClientTargetSection> ("system.web/clientTarget"); ClientTarget ct = null; if ((ct = sec.ClientTargets [value]) == null) value = value.ToLowerInvariant (); if (ct == null && (ct = sec.ClientTargets [value]) == null) { ThrowParseException (String.Format ( "ClientTarget '{0}' is an invalid alias. See the " + "documentation for <clientTarget> config. section.", clientTarget)); } value = ct.UserAgent; clientTarget = new MainDirectiveAttribute <string> (value, true); } else clientTarget = new MainDirectiveAttribute <string> (value); } notBuffer = !GetBool (atts, "Buffer", true); async = GetBool (atts, "Async", false); string asyncTimeoutVal = GetString (atts, "AsyncTimeout", null); if (asyncTimeoutVal != null) { try { asyncTimeout = Int32.Parse (asyncTimeoutVal); } catch (Exception) { ThrowParseException ("AsyncTimeout must be an integer value"); } } value = GetString (atts, "MasterPageFile", masterPage != null ? masterPage.Value : null); if (!String.IsNullOrEmpty (value)) { if (!BaseParser.IsExpression (value)) { if (!HostingEnvironment.VirtualPathProvider.FileExists (value)) ThrowParseFileNotFound (value); AddDependency (value); masterPage = new MainDirectiveAttribute <string> (value, true); } else masterPage = new MainDirectiveAttribute <string> (value); } value = GetString(atts, "Title", null); if (value != null) { if (!BaseParser.IsExpression (value)) title = new MainDirectiveAttribute <string> (value, true); else title = new MainDirectiveAttribute <string> (value); } value = GetString (atts, "Theme", theme != null ? theme.Value : null); if (value != null) { if (!BaseParser.IsExpression (value)) theme = new MainDirectiveAttribute <string> (value, true); else theme = new MainDirectiveAttribute <string> (value); } styleSheetTheme = GetString (atts, "StyleSheetTheme", styleSheetTheme); enable_event_validation = GetBool (atts, "EnableEventValidation", enable_event_validation); maintainScrollPositionOnPostBack = GetBool (atts, "MaintainScrollPositionOnPostBack", maintainScrollPositionOnPostBack); if (atts.Contains ("EnableViewState")) { enableViewStateMac = GetBool (atts, "EnableViewStateMac", enableViewStateMac); enableViewStateMacSet = true; } #if NET_4_0 value = GetString (atts, "MetaDescription", null); if (value != null) { if (!BaseParser.IsExpression (value)) metaDescription = new MainDirectiveAttribute <string> (value, true); else metaDescription = new MainDirectiveAttribute <string> (value); } value = GetString (atts, "MetaKeywords", null); if (value != null) { if (!BaseParser.IsExpression (value)) metaKeywords = new MainDirectiveAttribute <string> (value, true); else metaKeywords = new MainDirectiveAttribute <string> (value); } #endif // Ignored by now GetString (atts, "SmartNavigation", null); base.ProcessMainAttributes (atts); }
void AssignPropertyWithExpression <T> (CodeMemberMethod method, string name, MainDirectiveAttribute <T> value, ILocation location)