Bladeren bron

2009-02-18 Marek Habersack <[email protected]>

	* TemplateParser.cs: don't initialize PageParserFilter in
	LoadConfigDefaults, postpone it till the first time the
	PageParserFilter property is accessed.

	* ApplicationFileParser.cs, UserControlParser.cs: make sure
	VirtualPath is set in the constructors.

svn path=/trunk/mcs/; revision=127333
Marek Habersack 17 jaren geleden
bovenliggende
commit
ebd1b1f4a0

+ 4 - 0
mcs/class/System.Web/System.Web.UI/ApplicationFileParser.cs

@@ -47,6 +47,9 @@ namespace System.Web.UI
 		{
 			InputFile = fname;
 			Context = context;
+#if NET_2_0
+			VirtualPath = new VirtualPath ("/" + Path.GetFileName (fname));
+#endif
 		}
 
 #if NET_2_0
@@ -57,6 +60,7 @@ namespace System.Web.UI
 		
 		internal ApplicationFileParser (string virtualPath, string inputFile, TextReader reader, HttpContext context)
 		{
+			VirtualPath = new VirtualPath (virtualPath);
 			Context = context;
 			Reader = reader;
 

+ 9 - 0
mcs/class/System.Web/System.Web.UI/ChangeLog

@@ -1,3 +1,12 @@
+2009-02-18  Marek Habersack  <[email protected]>
+
+	* TemplateParser.cs: don't initialize PageParserFilter in
+	LoadConfigDefaults, postpone it till the first time the
+	PageParserFilter property is accessed.
+
+	* ApplicationFileParser.cs, UserControlParser.cs: make sure
+	VirtualPath is set in the constructors.
+
 2009-02-13  Marek Habersack  <[email protected]>
 
 	* TemplateParser.cs: PageParserFilter handling moved to here.

+ 14 - 5
mcs/class/System.Web/System.Web.UI/TemplateParser.cs

@@ -175,10 +175,6 @@ namespace System.Web.UI {
 			debug = CompilationConfig.Debug;
 #if NET_2_0
 			pageParserFilterTypeName = PagesConfig.PageParserFilterType;
-			if (!String.IsNullOrEmpty (pageParserFilterTypeName)) {
-				pageParserFilter = Activator.CreateInstance (PageParserFilterType) as PageParserFilter;
-				pageParserFilter.Initialize (VirtualPath, this);
-			}
 #endif
 		}
 		
@@ -304,6 +300,7 @@ namespace System.Web.UI {
 		internal virtual void AddDirective (string directive, Hashtable atts)
 		{
 #if NET_2_0
+			var pageParserFilter = PageParserFilter;
 			if (pageParserFilter != null)
 				pageParserFilter.PreprocessDirective (directive.ToLower (CultureInfo.InvariantCulture), atts);
 #endif
@@ -854,6 +851,7 @@ namespace System.Web.UI {
 			}
 
 #if NET_2_0
+			var pageParserFilter = PageParserFilter;
 			if (pageParserFilter != null && !pageParserFilter.AllowBaseType (parent))
 				throw new HttpException ("Base type '" + parent + "' is not allowed.");
 #endif
@@ -942,7 +940,18 @@ namespace System.Web.UI {
 		}
 
 		internal PageParserFilter PageParserFilter {
-			get { return pageParserFilter; }
+			get {
+				if (pageParserFilter != null)
+					return pageParserFilter;
+				
+				if (String.IsNullOrEmpty (pageParserFilterTypeName))
+					return null;
+
+				pageParserFilter = Activator.CreateInstance (PageParserFilterType) as PageParserFilter;
+				pageParserFilter.Initialize (VirtualPath, this);
+				
+				return pageParserFilter;
+			}
 		}
 		
 		internal Type PageParserFilterType {

+ 5 - 0
mcs/class/System.Web/System.Web.UI/UserControlParser.cs

@@ -55,6 +55,9 @@ namespace System.Web.UI
 		
 		internal UserControlParser (string virtualPath, string inputFile, HttpContext context, string type)
 		{
+#if NET_2_0
+			VirtualPath = new VirtualPath (virtualPath);
+#endif
 			Context = context;
 			BaseVirtualDir = VirtualPathUtility.GetDirectory (virtualPath, false);
 			InputFile = inputFile;
@@ -70,6 +73,7 @@ namespace System.Web.UI
 		
 		internal UserControlParser (string virtualPath, string inputFile, TextReader reader, HttpContext context)
 		{
+			VirtualPath = new VirtualPath (virtualPath);
 			Context = context;
 			BaseVirtualDir = VirtualPathUtility.GetDirectory (virtualPath, false);
 
@@ -90,6 +94,7 @@ namespace System.Web.UI
 			Context = context;
 
 			string fpath = context.Request.FilePath;
+			VirtualPath = new VirtualPath (fpath);
 			BaseVirtualDir = VirtualPathUtility.GetDirectory (fpath, false);
 
 			// We're probably being called by ParseControl - let's use the requested