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 36 using TargetInvocationException = System.Reflection.TargetInvocationException; 37 38 namespace Antlr.Runtime.JavaExtensions { 39 public static class ExceptionExtensions { 40 #if DEBUG 41 [Obsolete] getMessage(Exception e)42 public static string getMessage(Exception e) { 43 return e.Message; 44 } 45 #endif 46 getStackTrace(Exception e)47 public static StackFrame[] getStackTrace(Exception e) { 48 StackTrace trace = new StackTrace(e, true); 49 StackFrame[] frames = trace.GetFrames(); 50 if (frames == null) { 51 // don't include this helper function in the trace 52 Array stackTrace = new StackTrace(true).GetFrames(); 53 Array.Copy(stackTrace, 1, frames, 0, stackTrace.Length); 54 } 55 return frames; 56 } 57 58 #if DEBUG 59 [Obsolete] getMethodName(StackFrame frame)60 public static string getMethodName(StackFrame frame) { 61 return frame.GetMethod().Name; 62 } 63 64 [Obsolete] getClassName(StackFrame frame)65 public static string getClassName(StackFrame frame) { 66 return frame.GetMethod().DeclaringType.Name; 67 } 68 #endif 69 PrintStackTrace(Exception e)70 public static void PrintStackTrace(Exception e) { 71 ExceptionExtensions.PrintStackTrace(e, Console.Out); 72 } PrintStackTrace(Exception e, System.IO.TextWriter writer)73 public static void PrintStackTrace(Exception e, System.IO.TextWriter writer) { 74 writer.WriteLine(e.ToString()); 75 string trace = e.StackTrace ?? string.Empty; 76 foreach (string line in trace.Split('\n', '\r')) { 77 if (!string.IsNullOrEmpty(line)) 78 writer.WriteLine(" " + line); 79 } 80 } 81 82 #if DEBUG 83 [Obsolete] getTargetException(TargetInvocationException e)84 public static Exception getTargetException(TargetInvocationException e) { 85 return e.InnerException ?? e; 86 } 87 #endif 88 } 89 } 90