Mercurial Hosting > luan
comparison src/luan/LuaException.java @ 42:786699c78837
implement try-catch
git-svn-id: https://luan-java.googlecode.com/svn/trunk@43 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Sun, 23 Dec 2012 06:36:56 +0000 |
parents | e3624b7cd603 |
children | 80b67b1a653c |
comparison
equal
deleted
inserted
replaced
41:c53dc854e6cc | 42:786699c78837 |
---|---|
1 package luan; | 1 package luan; |
2 | 2 |
3 | 3 |
4 public class LuaException extends Exception { | 4 public class LuaException extends Exception { |
5 private final String stackTrace; | |
5 | 6 |
6 public LuaException(LuaState lua,LuaElement el,String msg) { | 7 public LuaException(LuaState lua,LuaElement el,Object msg) { |
7 super(hideNull(msg)+stackTrace(lua,el)); | 8 super(message(msg),cause(msg)); |
9 stackTrace = stackTrace(lua,el,msg); | |
8 } | 10 } |
9 | 11 |
10 public LuaException(LuaState lua,LuaElement el,Exception cause) { | 12 @Override public String getMessage() { |
11 super(hideNull(cause.getMessage())+stackTrace(lua,el),cause); | 13 return super.getMessage() + stackTrace; |
12 } | 14 } |
13 | 15 |
14 private static String hideNull(String s) { | 16 private String message() { |
15 return s==null ? "" : s; | 17 return super.getMessage(); |
16 } | 18 } |
17 | 19 |
18 private static String stackTrace(LuaState lua,LuaElement el) { | 20 private static Throwable cause(Object msg) { |
21 return msg instanceof Throwable ? (Throwable)msg : null; | |
22 } | |
23 | |
24 private static String message(Object msg) { | |
25 if( msg instanceof LuaException ) { | |
26 LuaException le = (LuaException)msg; | |
27 return le.message(); | |
28 } else if( msg instanceof Throwable ) { | |
29 Throwable t = (Throwable)msg; | |
30 return t.getMessage(); | |
31 } else { | |
32 return msg.toString(); | |
33 } | |
34 } | |
35 | |
36 private static String stackTrace(LuaState lua,LuaElement el,Object msg) { | |
19 StringBuilder buf = new StringBuilder(); | 37 StringBuilder buf = new StringBuilder(); |
20 int i = lua.stackTrace.size() - 1; | 38 int i = lua.stackTrace.size() - 1; |
21 do { | 39 do { |
22 StackTraceElement stackTraceElement = lua.stackTrace.get(i); | 40 StackTraceElement stackTraceElement = lua.stackTrace.get(i); |
23 buf.append( "\n\t" ).append( el.toString(stackTraceElement.fnName) ); | 41 buf.append( "\n\t" ).append( el.toString(stackTraceElement.fnName) ); |
24 el = stackTraceElement.call; | 42 el = stackTraceElement.call; |
25 } while( --i >= 0 ); | 43 } while( --i >= 0 ); |
44 if( msg instanceof LuaException ) { | |
45 LuaException le = (LuaException)msg; | |
46 buf.append( "\ncaused by:" ).append( le.stackTrace ); | |
47 } | |
26 return buf.toString(); | 48 return buf.toString(); |
27 } | 49 } |
28 } | 50 } |