The Labs \ Source Viewer \ SSCLI \ System.Xml.Xsl \ XslLoadException

  1. //------------------------------------------------------------------------------
  2. // <copyright file="XslException.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. using System.CodeDom.Compiler;
  16. using System.Diagnostics;
  17. using System.Globalization;
  18. using System.Resources;
  19. using System.Runtime.Serialization;
  20. using System.Security.Permissions;
  21. using System.Text;
  22. namespace System.Xml.Xsl
  23. {
  24.     using Res = System.Xml.Utils.Res;
  25.    
  26.     [Serializable()]
  27.     internal class XslTransformException : XsltException
  28.     {
  29.        
  30.         protected XslTransformException(SerializationInfo info, StreamingContext context) : base(info, context)
  31.         {
  32.         }
  33.        
  34.         public XslTransformException(Exception inner, string res, params string[] args) : base(CreateMessage(res, args), inner)
  35.         {
  36.         }
  37.        
  38.         public XslTransformException(string message) : base(CreateMessage(message, null), null)
  39.         {
  40.         }
  41.        
  42.         internal XslTransformException(string res, params string[] args) : this(null, res, args)
  43.         {
  44.         }
  45.        
  46.         static internal string CreateMessage(string res, params string[] args)
  47.         {
  48.             string message = null;
  49.            
  50.             try {
  51.                 message = Res.GetString(res, args);
  52.             }
  53.             catch (MissingManifestResourceException) {
  54.             }
  55.            
  56.             if (message != null) {
  57.                 return message;
  58.             }
  59.            
  60.             StringBuilder sb = new StringBuilder(res);
  61.             if (args != null && args.Length > 0) {
  62.                 Debug.Fail("Resource string '" + res + "' was not found");
  63.                 sb.Append('(');
  64.                 sb.Append(args[0]);
  65.                 for (int idx = 1; idx < args.Length; idx++) {
  66.                     sb.Append(", ");
  67.                     sb.Append(args[idx]);
  68.                 }
  69.                 sb.Append(')');
  70.             }
  71.             return sb.ToString();
  72.         }
  73.        
  74.         internal virtual string FormatDetailedMessage()
  75.         {
  76.             return Message;
  77.         }
  78.        
  79.         public override string ToString()
  80.         {
  81.             string result = this.GetType().FullName;
  82.             string info = FormatDetailedMessage();
  83.             if (info != null && info.Length > 0) {
  84.                 result += ": " + info;
  85.             }
  86.             if (InnerException != null) {
  87.                 result += " ---> " + InnerException.ToString() + Environment.NewLine + " " + CreateMessage(Res.Xml_EndOfInnerExceptionStack);
  88.             }
  89.             if (StackTrace != null) {
  90.                 result += Environment.NewLine + StackTrace;
  91.             }
  92.             return result;
  93.         }
  94.     }
  95.    
  96.     [Serializable()]
  97.     internal class XslLoadException : XslTransformException
  98.     {
  99.         ISourceLineInfo lineInfo;
  100.        
  101.         protected XslLoadException(SerializationInfo info, StreamingContext context) : base(info, context)
  102.         {
  103.             bool hasLineInfo = (bool)info.GetValue("hasLineInfo", typeof(bool));
  104.            
  105.             if (hasLineInfo) {
  106.                 string fileName;
  107.                 int startLine;
  108.                 int startPos;
  109.                 int endLine;
  110.                 int endPos;
  111.                
  112.                 fileName = (string)info.GetValue("FileName", typeof(string));
  113.                 startLine = (int)info.GetValue("StartLine", typeof(int));
  114.                 startPos = (int)info.GetValue("StartPos", typeof(int));
  115.                 endLine = (int)info.GetValue("EndLine", typeof(int));
  116.                 endPos = (int)info.GetValue("EndPos", typeof(int));
  117.                
  118.                 lineInfo = new SourceLineInfo(fileName, startLine, startPos, endLine, endPos);
  119.             }
  120.         }
  121.        
  122.         [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
  123.         public override void GetObjectData(SerializationInfo info, StreamingContext context)
  124.         {
  125.             base.GetObjectData(info, context);
  126.             info.AddValue("hasLineInfo", lineInfo != null);
  127.            
  128.             if (lineInfo != null) {
  129.                 info.AddValue("Uri", lineInfo.Uri);
  130.                 info.AddValue("StartLine", lineInfo.StartLine);
  131.                 info.AddValue("StartPos", lineInfo.StartPos);
  132.                 info.AddValue("EndLine", lineInfo.EndLine);
  133.                 info.AddValue("EndPos", lineInfo.EndPos);
  134.             }
  135.         }
  136.        
  137.         internal XslLoadException(string res, params string[] args) : base(null, res, args)
  138.         {
  139.         }
  140.        
  141.         internal XslLoadException(Exception inner, ISourceLineInfo lineInfo) : base(inner, Res.Xslt_CompileError2, null)
  142.         {
  143.             this.lineInfo = lineInfo;
  144.         }
  145.        
  146.         internal XslLoadException(CompilerError error) : base(Res.Xml_UserException, new string[] {error.ErrorText})
  147.         {
  148.             SetSourceLineInfo(new SourceLineInfo(error.FileName, error.Line, error.Column, error.Line, error.Column));
  149.         }
  150.        
  151.         internal void SetSourceLineInfo(ISourceLineInfo lineInfo)
  152.         {
  153.             this.lineInfo = lineInfo;
  154.         }
  155.        
  156.         public override string SourceUri {
  157.             get { return lineInfo != null ? lineInfo.Uri : null; }
  158.         }
  159.        
  160.         public override int LineNumber {
  161.             get { return lineInfo != null ? lineInfo.StartLine : 0; }
  162.         }
  163.        
  164.         public override int LinePosition {
  165.             get { return lineInfo != null ? lineInfo.StartPos : 0; }
  166.         }
  167.        
  168.         private static string AppendLineInfoMessage(string message, ISourceLineInfo lineInfo)
  169.         {
  170.             if (lineInfo != null) {
  171.                 string fileName = SourceLineInfo.GetFileName(lineInfo.Uri);
  172.                 string lineInfoMessage = CreateMessage(Res.Xml_ErrorFilePosition, fileName, lineInfo.StartLine.ToString(CultureInfo.InvariantCulture), lineInfo.StartPos.ToString(CultureInfo.InvariantCulture));
  173.                 if (lineInfoMessage != null && lineInfoMessage.Length > 0) {
  174.                     if (message.Length > 0 && !XmlCharType.Instance.IsWhiteSpace(message[message.Length - 1])) {
  175.                         message += " ";
  176.                     }
  177.                     message += lineInfoMessage;
  178.                 }
  179.             }
  180.             return message;
  181.         }
  182.        
  183.         static internal string CreateMessage(ISourceLineInfo lineInfo, string res, params string[] args)
  184.         {
  185.             return AppendLineInfoMessage(CreateMessage(res, args), lineInfo);
  186.         }
  187.        
  188.         internal override string FormatDetailedMessage()
  189.         {
  190.             return AppendLineInfoMessage(Message, lineInfo);
  191.         }
  192.     }
  193. }

Developer Fusion