1 /* 2 * [The "BSD licence"] 3 * Copyright (c) 2005-2008 Terence Parr 4 * All rights reserved. 5 * 6 * Conversion to C#: 7 * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 using System; 34 using System.Diagnostics; 35 using System.Linq; 36 37 using TargetInvocationException = System.Reflection.TargetInvocationException; 38 39 namespace Antlr.Runtime.JavaExtensions 40 { 41 public static class ExceptionExtensions 42 { 43 #if DEBUG 44 [Obsolete] getMessage( this Exception e )45 public static string getMessage( this Exception e ) 46 { 47 return e.Message; 48 } 49 #endif 50 getStackTrace( this Exception e )51 public static StackFrame[] getStackTrace( this Exception e ) 52 { 53 StackTrace trace = new StackTrace( e, true ); 54 StackFrame[] frames = trace.GetFrames(); 55 if ( frames == null ) 56 { 57 // don't include this helper function in the trace 58 frames = new StackTrace( true ).GetFrames().Skip( 1 ).ToArray(); 59 } 60 return frames; 61 } 62 63 #if DEBUG 64 [Obsolete] getMethodName( this StackFrame frame )65 public static string getMethodName( this StackFrame frame ) 66 { 67 return frame.GetMethod().Name; 68 } 69 70 [Obsolete] getClassName( this StackFrame frame )71 public static string getClassName( this StackFrame frame ) 72 { 73 return frame.GetMethod().DeclaringType.Name; 74 } 75 #endif 76 PrintStackTrace( this Exception e )77 public static void PrintStackTrace( this Exception e ) 78 { 79 e.PrintStackTrace( Console.Out ); 80 } PrintStackTrace( this Exception e, System.IO.TextWriter writer )81 public static void PrintStackTrace( this Exception e, System.IO.TextWriter writer ) 82 { 83 writer.WriteLine( e.ToString() ); 84 string trace = e.StackTrace ?? string.Empty; 85 foreach ( string line in trace.Split( '\n', '\r' ) ) 86 { 87 if ( !string.IsNullOrEmpty( line ) ) 88 writer.WriteLine( " " + line ); 89 } 90 } 91 92 #if DEBUG 93 [Obsolete] getTargetException( this TargetInvocationException e )94 public static Exception getTargetException( this TargetInvocationException e ) 95 { 96 return e.InnerException ?? e; 97 } 98 #endif 99 } 100 } 101