2003-10-01 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaException.cs
index 01ea8721d3be5170bca505cbdebbd5b22c721e8d..3d46ddf2f8ca3495855642e8163a8cc609a7f8c9 100755 (executable)
@@ -13,6 +13,7 @@ namespace System.Xml.Schema
        public class XmlSchemaException : System.SystemException\r
        {\r
                //fields\r
+               private bool hasLineInfo;\r
                private int lineNumber;\r
                private int linePosition;\r
                private XmlSchemaObject sourceObj;\r
@@ -21,26 +22,42 @@ namespace System.Xml.Schema
                protected XmlSchemaException(SerializationInfo info, StreamingContext context)\r
                        : base (info, context)\r
                {\r
+                       hasLineInfo = true;\r
                        this.lineNumber = info.GetInt32 ("lineNumber");\r
                        this.linePosition = info.GetInt32 ("linePosition");\r
                        this.sourceUri = info.GetString ("sourceUri");\r
                        this.sourceObj = info.GetValue ("sourceObj", typeof (XmlSchemaObject)) as XmlSchemaObject;\r
                }\r
                \r
-               \r
                internal XmlSchemaException(string message, int lineNumber, int linePosition,\r
                        XmlSchemaObject sourceObject, string sourceUri, Exception innerException)\r
                        : base(message, innerException)\r
                {\r
+                       hasLineInfo = true;\r
                        this.lineNumber         = lineNumber;\r
                        this.linePosition       = linePosition;\r
                        this.sourceObj          = sourceObject;\r
                        this.sourceUri          = sourceUri;\r
                }\r
+\r
+               internal XmlSchemaException(string message, object sender,\r
+                       string sourceUri, XmlSchemaObject sourceObject, Exception innerException)\r
+                       : base(message, innerException)\r
+               {\r
+                       IXmlLineInfo li = sender as IXmlLineInfo;\r
+                       if (li != null && li.HasLineInfo ()) {\r
+                               hasLineInfo = true;\r
+                               this.lineNumber = li.LineNumber;\r
+                               this.linePosition = li.LinePosition;\r
+                       }\r
+                       this.sourceObj = sourceObject;\r
+               }\r
+\r
                internal XmlSchemaException(string message, XmlSchemaObject sourceObject,\r
                        Exception innerException)\r
                        : base(message, innerException)\r
                {\r
+                       hasLineInfo = true;\r
                        this.lineNumber = sourceObject.LineNumber;\r
                        this.linePosition = sourceObject.LinePosition;\r
                        this.sourceObj  =       sourceObject;\r
@@ -71,12 +88,15 @@ namespace System.Xml.Schema
                public override string Message\r
                {\r
                        get {\r
-                               string msg = base.Message;\r
-                               if (sourceUri != null)\r
-                                       msg = String.Format ("XmlSchema error: {0}\n" +\r
-                                                            "URI: {1}, line {2}, position {3}",\r
-                                                            msg, sourceUri, lineNumber, linePosition);\r
-\r
+                               string msg = "XmlSchema error: " + base.Message;\r
+                               if (hasLineInfo)\r
+                                       msg += String.Format (" XML {0} Line {1}, Position {2}.",\r
+                                               (sourceUri != null && sourceUri != "") ? "URI: " + sourceUri + " ." : "",\r
+                                               lineNumber,\r
+                                               linePosition);\r
+                               if (sourceObj != null)\r
+                                       msg += String.Format (" Related schema item SourceUri: {0}, Line {1}, Position {2}.",\r
+                                               sourceObj.SourceUri, sourceObj.LineNumber, sourceObj.LinePosition);\r
                                return msg;\r
                        }\r
                }\r