comparison src/luan/LuanException.java @ 1125:442abdfff437

include luan stack in LuanException.printStackTrace()
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 24 Aug 2017 14:03:36 -0600
parents e15be31cee92
children 9fa8b8389578
comparison
equal deleted inserted replaced
1124:ea7112e9eb1d 1125:442abdfff437
1 package luan; 1 package luan;
2 2
3 import java.io.StringWriter; 3 import java.io.StringWriter;
4 import java.io.PrintWriter; 4 import java.io.PrintWriter;
5 import java.io.PrintStream;
5 import java.util.List; 6 import java.util.List;
6 import java.util.ArrayList; 7 import java.util.ArrayList;
7 8
8 9
9 public final class LuanException extends Exception implements LuanCloneable { 10 public final class LuanException extends Exception implements LuanCloneable {
101 if( !method.equals("doCall") ) 102 if( !method.equals("doCall") )
102 sb.append( " in function '" ).append( method.substring(1) ).append( "'" ); 103 sb.append( " in function '" ).append( method.substring(1) ).append( "'" );
103 return sb.toString(); 104 return sb.toString();
104 } 105 }
105 106
106 public String getLuanStackTraceString() { 107 private StringBuilder luanStackTrace() {
107 StringBuilder sb = new StringBuilder(); 108 StringBuilder sb = new StringBuilder();
108 sb.append( getMessage() ); 109 sb.append( getMessage() );
109 for( StackTraceElement ste : justLuan(getStackTrace()) ) { 110 for( StackTraceElement ste : justLuan(getStackTrace()) ) {
110 sb.append( "\n\t" ).append( toString(ste) ); 111 sb.append( "\n\t" ).append( toString(ste) );
111 } 112 }
113 return sb;
114 }
115
116 public String getLuanStackTraceString() {
117 StringBuilder sb = luanStackTrace();
112 Throwable cause = getCause(); 118 Throwable cause = getCause();
113 if( cause != null ) 119 if( cause != null )
114 sb.append( "\nCaused by: " ).append( getJavaStackTraceString(cause) ); 120 sb.append( "\nCaused by: " ).append( getJavaStackTraceString(cause) );
115 return sb.toString(); 121 return sb.toString();
116 } 122 }
119 LuanException ex = new LuanException("currentSource"); 125 LuanException ex = new LuanException("currentSource");
120 List<StackTraceElement> st = ex.justLuan(ex.getStackTrace()); 126 List<StackTraceElement> st = ex.justLuan(ex.getStackTrace());
121 return st.isEmpty() ? null : st.get(0).getFileName(); 127 return st.isEmpty() ? null : st.get(0).getFileName();
122 } 128 }
123 129
130 @Override public void printStackTrace(PrintStream s) {
131 s.print("Luan: ");
132 s.println(luanStackTrace());
133 s.print("Caused by: ");
134 super.printStackTrace(s);
135 }
136
137 @Override public void printStackTrace(PrintWriter s) {
138 s.print("Luan: ");
139 s.println(luanStackTrace());
140 s.print("Caused by: ");
141 super.printStackTrace(s);
142 }
143
124 } 144 }