瀏覽代碼

Fix ChangeLog entry to tell the truth

svn path=/trunk/mcs/; revision=27708
Gonzalo Paniagua Javier 21 年之前
父節點
當前提交
8886aab23f

+ 1 - 1
mcs/class/System/System.Diagnostics/ChangeLog

@@ -6,7 +6,7 @@
 2004-05-19  Gonzalo Paniagua Javier <[email protected]>
 
 	* Process.cs: redirecting I/O is not permitted if UseShellExecute is
-	false. Also throw if FileName is null.
+	true. Also throw if FileName is null.
 
 2004-04-06  Lluis Sanchez Gual  <[email protected]>
 

+ 358 - 357
mcs/class/System/System.Diagnostics/DiagnosticsConfigurationHandler.cs

@@ -1,359 +1,360 @@
-//
-// System.Diagnostics.DiagnosticsConfigurationHandler.cs
-//
-// Comments from John R. Hicks <[email protected]> original implementation 
-// can be found at: /mcs/docs/apidocs/xml/en/System.Diagnostics
-//
-// Authors: 
-//	John R. Hicks <[email protected]>
-//	Jonathan Pryor <[email protected]>
-//
-// (C) 2002
-//
-using System;
-using System.Collections;
-using System.Configuration;
#if (XML_DEP)
+//
+// System.Diagnostics.DiagnosticsConfigurationHandler.cs
+//
+// Comments from John R. Hicks <[email protected]> original implementation 
+// can be found at: /mcs/docs/apidocs/xml/en/System.Diagnostics
+//
+// Authors: 
+//	John R. Hicks <[email protected]>
+//	Jonathan Pryor <[email protected]>
+//
+// (C) 2002
+//
+using System;
+using System.Collections;
+using System.Configuration;
+#if (XML_DEP)
 using System.Xml;
-#endif
-namespace System.Diagnostics
-{
-	internal sealed class DiagnosticsConfiguration
-	{
-		private static IDictionary settings = null;
-
-		public static IDictionary Settings {
-			get {
-				// TODO: Does anybody know if this is actually thread-safe under .NET?
-				// I've heard that this construct isn't safe under Java, but it's used
-				// reasonably often under C++, so I'm not sure about .NET.
-				if (settings == null) {
-					lock (typeof(DiagnosticsConfiguration)) {
-						if (settings == null)
-							settings = (IDictionary) ConfigurationSettings.GetConfig ("system.diagnostics");
-					}
-				}
-				return settings;
-			}
-		}
-	}
-
#if (XML_DEP)
-	public class DiagnosticsConfigurationHandler : IConfigurationSectionHandler
-	{
-		delegate void ElementHandler (IDictionary d, XmlNode node);
-
-		IDictionary elementHandlers = new Hashtable ();
-
-		public DiagnosticsConfigurationHandler ()
-		{
-			elementHandlers ["assert"] = new ElementHandler (AddAssertNode);
-			elementHandlers ["switches"] = new ElementHandler (AddSwitchesNode);
-			elementHandlers ["trace"] = new ElementHandler (AddTraceNode);
-		}
-
-		public virtual object Create (object parent, object configContext, XmlNode section)
-		{
-			IDictionary d;
-			if (parent == null)
-				d = new Hashtable (CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
-			else
-				d = (IDictionary) ((ICloneable)parent).Clone();
-
-			foreach (XmlNode child in section.ChildNodes) {
-				XmlNodeType type = child.NodeType;
-
-				switch (type) {
-				/* ignore */
-				case XmlNodeType.Whitespace:
-				case XmlNodeType.Comment:
-					continue;
-				case XmlNodeType.Element:
-					ElementHandler eh = (ElementHandler) elementHandlers [child.Name];
-					if (eh != null)
-						eh (d, child);
-					else
-						ThrowUnrecognizedElement (child);
-					break;
-				default:
-					ThrowUnrecognizedElement (child);
-					break;
-				}
-			}
-
-			return d;
-		}
-
-		// Remarks: Both attribute are optional
-		private void AddAssertNode (IDictionary d, XmlNode node)
-		{
-			XmlAttributeCollection c = node.Attributes;
-			string assertuienabled = GetAttribute (c, "assertuienabled", false, node);
-			string logfilename = GetAttribute (c, "logfilename", false, node);
-			ValidateInvalidAttributes (c, node);
-			if (assertuienabled != null) {
-				try {
-					d ["assertuienabled"] = bool.Parse (assertuienabled);
-				}
-				catch (Exception e) {
-					throw new ConfigurationException ("The `assertuienabled' attribute must be `true' or `false'",
-							e, node);
-				}
-			}
-
-			if (logfilename != null)
-				d ["logfilename"] = logfilename;
-
-			DefaultTraceListener dtl = (DefaultTraceListener) TraceImpl.Listeners["Default"];
-			if (dtl != null) {
-				if (assertuienabled != null)
-					dtl.AssertUiEnabled = (bool) d ["assertuienabled"];
-				if (logfilename != null)
-					dtl.LogFileName = logfilename;
-			}
-
-			if (node.ChildNodes.Count > 0)
-				ThrowUnrecognizedElement (node.ChildNodes[0]);
-		}
-
-		// name attribute is required, value is optional
-		// Docs do not define "remove" or "clear" elements, but .NET recognizes
-		// them
-		private void AddSwitchesNode (IDictionary d, XmlNode node)
-		{
-			// There are no attributes on <switch/>
-			ValidateInvalidAttributes (node.Attributes, node);
-
-			IDictionary newNodes = new Hashtable ();
-
-			foreach (XmlNode child in node.ChildNodes) {
-				XmlNodeType t = child.NodeType;
-				if (t == XmlNodeType.Whitespace || t == XmlNodeType.Comment)
-					continue;
-				if (t == XmlNodeType.Element) {
-					XmlAttributeCollection attributes = child.Attributes;
-					string name = null;
-					string value = null;
-					switch (child.Name) {
-						case "add":
-							name = GetAttribute (attributes, "name", true, child);
-							value = GetAttribute (attributes, "value", false, child);
-							newNodes[name] = AsString (value);
-							break;
-						case "remove":
-							name = GetAttribute (attributes, "name", true, child);
-							newNodes.Remove (name);
-							break;
-						case "clear":
-							newNodes.Clear ();
-							break;
-						default:
-							ThrowUnrecognizedElement (child);
-							break;
-					}
-					ValidateInvalidAttributes (attributes, child);
-				}
-				else
-					ThrowUnrecognizedNode (child);
-			}
-
-			d [node.Name] = newNodes;
-		}
-
-		private void AddTraceNode (IDictionary d, XmlNode node)
-		{
-			AddTraceAttributes (d, node);
-
-			foreach (XmlNode child in node.ChildNodes) {
-				XmlNodeType t = child.NodeType;
-				if (t == XmlNodeType.Whitespace || t == XmlNodeType.Comment)
-					continue;
-				if (t == XmlNodeType.Element) {
-					if (child.Name == "listeners")
-						AddTraceListeners (child);
-					else
-						ThrowUnrecognizedElement (child);
-					ValidateInvalidAttributes (child.Attributes, child);
-				}
-				else
-					ThrowUnrecognizedNode (child);
-			}
-		}
-
-		// all attributes are optional
-		private void AddTraceAttributes (IDictionary d, XmlNode node)
-		{
-			XmlAttributeCollection c = node.Attributes;
-			string autoflush = GetAttribute (c, "autoflush", false, node);
-			string indentsize = GetAttribute (c, "indentsize", false, node);
-			ValidateInvalidAttributes (c, node);
-			if (autoflush != null) {
-				try {
-					bool b = bool.Parse (autoflush);
-					d ["autoflush"] = b;
-					TraceImpl.AutoFlush = b;
-				}
-				catch (Exception e) {
-					throw new ConfigurationException ("The `autoflush' attribute must be `true' or `false'",
-							e, node);
-				}
-			}
-			if (indentsize != null) {
-				try {
-					int n = int.Parse (indentsize);
-					d ["indentsize"] = n;
-					TraceImpl.IndentSize = n;
-				}
-				catch (Exception e) {
-					throw new ConfigurationException ("The `indentsize' attribute must be an integral value.",
-							e, node);
-				}
-			}
-		}
-
-		// only defines "add" and "remove", but "clear" also works
-		// for add, "name" and "type" are required; initializeData is optional
-		private void AddTraceListeners (XmlNode listenersNode)
-		{
-			// There are no attributes on <listeners/>
-			ValidateInvalidAttributes (listenersNode.Attributes, listenersNode);
-
-			foreach (XmlNode child in listenersNode.ChildNodes) {
-				XmlNodeType t = child.NodeType;
-				if (t == XmlNodeType.Whitespace || t == XmlNodeType.Comment)
-					continue;
-				if (t == XmlNodeType.Element) {
-					XmlAttributeCollection attributes = child.Attributes;
-					string name = null;
-					string type = null;
-					string id = null;
-					switch (child.Name) {
-						case "add":
-							name = GetAttribute (attributes, "name", true, child);
-							type = GetAttribute (attributes, "type", true, child);
-							id = GetAttribute (attributes, "initializeData", false, child);
-							AddTraceListener (name, type, id);
-							break;
-						case "remove":
-							name = GetAttribute (attributes, "name", true, child);
-							RemoveTraceListener (name);
-							break;
-						case "clear":
-							TraceImpl.Listeners.Clear ();
-							break;
-						default:
-							ThrowUnrecognizedElement (child);
-							break;
-					}
-					ValidateInvalidAttributes (attributes, child);
-				}
-				else
-					ThrowUnrecognizedNode (child);
-			}
-		}
-
-		private void AddTraceListener (string name, string type, string initializeData)
-		{
-			Type t = Type.GetType (type);
-			if (t == null)
-				throw new ConfigurationException (string.Format ("Invalid Type Specified: {0}", type));
-
-			object[] args;
-			Type[] types;
-			
-			if (initializeData != null) {
-				args = new object[] { initializeData };
-				types = new Type[] { typeof(string) };
-			}
-			else {
-				args = null;
-				types = new Type[0];
-			}
-				
-			System.Reflection.ConstructorInfo ctor = t.GetConstructor (types);
-			if (ctor == null) 
-				throw new ConfigurationException ("Couldn't find constructor for class " + type);
-			
-			TraceListener l = (TraceListener) ctor.Invoke (args);
-			l.Name = name;
-			TraceImpl.Listeners.Add (l);
-		}
-
-		private void RemoveTraceListener (string name)
-		{
-			try {
-				TraceImpl.Listeners.Remove (name);
-			}
-			catch (ArgumentException) {
-				// The specified listener wasn't in the collection
-				// Ignore this; .NET does.
-			}
-			catch (Exception e) {
-				throw new ConfigurationException (
-						string.Format ("Unknown error removing listener: {0}", name),
-						e);
-			}
-		}
-
-		private string GetAttribute (XmlAttributeCollection attrs, string attr, bool required, XmlNode node)
-		{
-			XmlAttribute a = attrs[attr];
-
-			string r = null;
-
-			if (a != null) {
-				r = a.Value;
-				if (required)
-					ValidateAttribute (attr, r, node);
-				attrs.Remove (a);
-			}
-			else if (required)
-				ThrowMissingAttribute (attr, node);
-
-			return r;
-		}
-		
-		private string AsString (string s)
-		{
-			return s == null ? string.Empty : s;
-		}
-
-		private void ValidateAttribute (string attribute, string value, XmlNode node)
-		{
-			if (value == null || value.Length == 0)
-				throw new ConfigurationException (string.Format ("Required attribute `{0}' cannot be empty.", attribute), node);
-		}
-
-		private void ValidateInvalidAttributes (XmlAttributeCollection c, XmlNode node)
-		{
-			if (c.Count != 0)
-				ThrowUnrecognizedAttribute (c[0].Name, node);
-		}
-
-		private void ThrowMissingAttribute (string attribute, XmlNode node)
-		{
-			throw new ConfigurationException (string.Format ("Missing required attribute `{0}'.", attribute), node);
-		}
-
-		private void ThrowUnrecognizedNode (XmlNode node)
-		{
-			throw new ConfigurationException (
-					string.Format ("Unrecognized node `{0}'; nodeType={1}", node.Name, node.NodeType),
-					node);
-		}
-
-		private void ThrowUnrecognizedElement (XmlNode node)
-		{
-			throw new ConfigurationException (
-					string.Format ("Unrecognized element <{0}/>", node.Name),
-					node);
-		}
-
-		private void ThrowUnrecognizedAttribute (string attribute, XmlNode node)
-		{
-			throw new ConfigurationException (
-					string.Format ("Unrecognized attribute `{0}' on element <{1}/>.", attribute, node.Name),
-					node);
-		}
+#endif
+namespace System.Diagnostics
+{
+	internal sealed class DiagnosticsConfiguration
+	{
+		private static IDictionary settings = null;
+
+		public static IDictionary Settings {
+			get {
+				// TODO: Does anybody know if this is actually thread-safe under .NET?
+				// I've heard that this construct isn't safe under Java, but it's used
+				// reasonably often under C++, so I'm not sure about .NET.
+				if (settings == null) {
+					lock (typeof(DiagnosticsConfiguration)) {
+						if (settings == null)
+							settings = (IDictionary) ConfigurationSettings.GetConfig ("system.diagnostics");
+					}
+				}
+				return settings;
+			}
+		}
 	}
-#endif
-}
-
+#if (XML_DEP)
+	public class DiagnosticsConfigurationHandler : IConfigurationSectionHandler
+	{
+		delegate void ElementHandler (IDictionary d, XmlNode node);
+
+		IDictionary elementHandlers = new Hashtable ();
+
+		public DiagnosticsConfigurationHandler ()
+		{
+			elementHandlers ["assert"] = new ElementHandler (AddAssertNode);
+			elementHandlers ["switches"] = new ElementHandler (AddSwitchesNode);
+			elementHandlers ["trace"] = new ElementHandler (AddTraceNode);
+		}
+
+		public virtual object Create (object parent, object configContext, XmlNode section)
+		{
+			IDictionary d;
+			if (parent == null)
+				d = new Hashtable (CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
+			else
+				d = (IDictionary) ((ICloneable)parent).Clone();
+
+			foreach (XmlNode child in section.ChildNodes) {
+				XmlNodeType type = child.NodeType;
+
+				switch (type) {
+				/* ignore */
+				case XmlNodeType.Whitespace:
+				case XmlNodeType.Comment:
+					continue;
+				case XmlNodeType.Element:
+					ElementHandler eh = (ElementHandler) elementHandlers [child.Name];
+					if (eh != null)
+						eh (d, child);
+					else
+						ThrowUnrecognizedElement (child);
+					break;
+				default:
+					ThrowUnrecognizedElement (child);
+					break;
+				}
+			}
+
+			return d;
+		}
+
+		// Remarks: Both attribute are optional
+		private void AddAssertNode (IDictionary d, XmlNode node)
+		{
+			XmlAttributeCollection c = node.Attributes;
+			string assertuienabled = GetAttribute (c, "assertuienabled", false, node);
+			string logfilename = GetAttribute (c, "logfilename", false, node);
+			ValidateInvalidAttributes (c, node);
+			if (assertuienabled != null) {
+				try {
+					d ["assertuienabled"] = bool.Parse (assertuienabled);
+				}
+				catch (Exception e) {
+					throw new ConfigurationException ("The `assertuienabled' attribute must be `true' or `false'",
+							e, node);
+				}
+			}
+
+			if (logfilename != null)
+				d ["logfilename"] = logfilename;
+
+			DefaultTraceListener dtl = (DefaultTraceListener) TraceImpl.Listeners["Default"];
+			if (dtl != null) {
+				if (assertuienabled != null)
+					dtl.AssertUiEnabled = (bool) d ["assertuienabled"];
+				if (logfilename != null)
+					dtl.LogFileName = logfilename;
+			}
+
+			if (node.ChildNodes.Count > 0)
+				ThrowUnrecognizedElement (node.ChildNodes[0]);
+		}
+
+		// name attribute is required, value is optional
+		// Docs do not define "remove" or "clear" elements, but .NET recognizes
+		// them
+		private void AddSwitchesNode (IDictionary d, XmlNode node)
+		{
+			// There are no attributes on <switch/>
+			ValidateInvalidAttributes (node.Attributes, node);
+
+			IDictionary newNodes = new Hashtable ();
+
+			foreach (XmlNode child in node.ChildNodes) {
+				XmlNodeType t = child.NodeType;
+				if (t == XmlNodeType.Whitespace || t == XmlNodeType.Comment)
+					continue;
+				if (t == XmlNodeType.Element) {
+					XmlAttributeCollection attributes = child.Attributes;
+					string name = null;
+					string value = null;
+					switch (child.Name) {
+						case "add":
+							name = GetAttribute (attributes, "name", true, child);
+							value = GetAttribute (attributes, "value", false, child);
+							newNodes[name] = AsString (value);
+							break;
+						case "remove":
+							name = GetAttribute (attributes, "name", true, child);
+							newNodes.Remove (name);
+							break;
+						case "clear":
+							newNodes.Clear ();
+							break;
+						default:
+							ThrowUnrecognizedElement (child);
+							break;
+					}
+					ValidateInvalidAttributes (attributes, child);
+				}
+				else
+					ThrowUnrecognizedNode (child);
+			}
+
+			d [node.Name] = newNodes;
+		}
+
+		private void AddTraceNode (IDictionary d, XmlNode node)
+		{
+			AddTraceAttributes (d, node);
+
+			foreach (XmlNode child in node.ChildNodes) {
+				XmlNodeType t = child.NodeType;
+				if (t == XmlNodeType.Whitespace || t == XmlNodeType.Comment)
+					continue;
+				if (t == XmlNodeType.Element) {
+					if (child.Name == "listeners")
+						AddTraceListeners (child);
+					else
+						ThrowUnrecognizedElement (child);
+					ValidateInvalidAttributes (child.Attributes, child);
+				}
+				else
+					ThrowUnrecognizedNode (child);
+			}
+		}
+
+		// all attributes are optional
+		private void AddTraceAttributes (IDictionary d, XmlNode node)
+		{
+			XmlAttributeCollection c = node.Attributes;
+			string autoflush = GetAttribute (c, "autoflush", false, node);
+			string indentsize = GetAttribute (c, "indentsize", false, node);
+			ValidateInvalidAttributes (c, node);
+			if (autoflush != null) {
+				try {
+					bool b = bool.Parse (autoflush);
+					d ["autoflush"] = b;
+					TraceImpl.AutoFlush = b;
+				}
+				catch (Exception e) {
+					throw new ConfigurationException ("The `autoflush' attribute must be `true' or `false'",
+							e, node);
+				}
+			}
+			if (indentsize != null) {
+				try {
+					int n = int.Parse (indentsize);
+					d ["indentsize"] = n;
+					TraceImpl.IndentSize = n;
+				}
+				catch (Exception e) {
+					throw new ConfigurationException ("The `indentsize' attribute must be an integral value.",
+							e, node);
+				}
+			}
+		}
+
+		// only defines "add" and "remove", but "clear" also works
+		// for add, "name" and "type" are required; initializeData is optional
+		private void AddTraceListeners (XmlNode listenersNode)
+		{
+			// There are no attributes on <listeners/>
+			ValidateInvalidAttributes (listenersNode.Attributes, listenersNode);
+
+			foreach (XmlNode child in listenersNode.ChildNodes) {
+				XmlNodeType t = child.NodeType;
+				if (t == XmlNodeType.Whitespace || t == XmlNodeType.Comment)
+					continue;
+				if (t == XmlNodeType.Element) {
+					XmlAttributeCollection attributes = child.Attributes;
+					string name = null;
+					string type = null;
+					string id = null;
+					switch (child.Name) {
+						case "add":
+							name = GetAttribute (attributes, "name", true, child);
+							type = GetAttribute (attributes, "type", true, child);
+							id = GetAttribute (attributes, "initializeData", false, child);
+							AddTraceListener (name, type, id);
+							break;
+						case "remove":
+							name = GetAttribute (attributes, "name", true, child);
+							RemoveTraceListener (name);
+							break;
+						case "clear":
+							TraceImpl.Listeners.Clear ();
+							break;
+						default:
+							ThrowUnrecognizedElement (child);
+							break;
+					}
+					ValidateInvalidAttributes (attributes, child);
+				}
+				else
+					ThrowUnrecognizedNode (child);
+			}
+		}
+
+		private void AddTraceListener (string name, string type, string initializeData)
+		{
+			Type t = Type.GetType (type);
+			if (t == null)
+				throw new ConfigurationException (string.Format ("Invalid Type Specified: {0}", type));
+
+			object[] args;
+			Type[] types;
+			
+			if (initializeData != null) {
+				args = new object[] { initializeData };
+				types = new Type[] { typeof(string) };
+			}
+			else {
+				args = null;
+				types = new Type[0];
+			}
+				
+			System.Reflection.ConstructorInfo ctor = t.GetConstructor (types);
+			if (ctor == null) 
+				throw new ConfigurationException ("Couldn't find constructor for class " + type);
+			
+			TraceListener l = (TraceListener) ctor.Invoke (args);
+			l.Name = name;
+			TraceImpl.Listeners.Add (l);
+		}
+
+		private void RemoveTraceListener (string name)
+		{
+			try {
+				TraceImpl.Listeners.Remove (name);
+			}
+			catch (ArgumentException) {
+				// The specified listener wasn't in the collection
+				// Ignore this; .NET does.
+			}
+			catch (Exception e) {
+				throw new ConfigurationException (
+						string.Format ("Unknown error removing listener: {0}", name),
+						e);
+			}
+		}
+
+		private string GetAttribute (XmlAttributeCollection attrs, string attr, bool required, XmlNode node)
+		{
+			XmlAttribute a = attrs[attr];
+
+			string r = null;
+
+			if (a != null) {
+				r = a.Value;
+				if (required)
+					ValidateAttribute (attr, r, node);
+				attrs.Remove (a);
+			}
+			else if (required)
+				ThrowMissingAttribute (attr, node);
+
+			return r;
+		}
+		
+		private string AsString (string s)
+		{
+			return s == null ? string.Empty : s;
+		}
+
+		private void ValidateAttribute (string attribute, string value, XmlNode node)
+		{
+			if (value == null || value.Length == 0)
+				throw new ConfigurationException (string.Format ("Required attribute `{0}' cannot be empty.", attribute), node);
+		}
+
+		private void ValidateInvalidAttributes (XmlAttributeCollection c, XmlNode node)
+		{
+			if (c.Count != 0)
+				ThrowUnrecognizedAttribute (c[0].Name, node);
+		}
+
+		private void ThrowMissingAttribute (string attribute, XmlNode node)
+		{
+			throw new ConfigurationException (string.Format ("Missing required attribute `{0}'.", attribute), node);
+		}
+
+		private void ThrowUnrecognizedNode (XmlNode node)
+		{
+			throw new ConfigurationException (
+					string.Format ("Unrecognized node `{0}'; nodeType={1}", node.Name, node.NodeType),
+					node);
+		}
+
+		private void ThrowUnrecognizedElement (XmlNode node)
+		{
+			throw new ConfigurationException (
+					string.Format ("Unrecognized element <{0}/>", node.Name),
+					node);
+		}
+
+		private void ThrowUnrecognizedAttribute (string attribute, XmlNode node)
+		{
+			throw new ConfigurationException (
+					string.Format ("Unrecognized attribute `{0}' on element <{1}/>.", attribute, node.Name),
+					node);
+		}
+	}
+#endif
+}
+