| /* | |
| * $Id: LuaRuntimeException.java 76 2012-01-06 01:25:52Z andre@naef.com $ | |
| * See LICENSE.txt for license terms. | |
| */ | |
| package com.naef.jnlua; | |
| import java.io.PrintStream; | |
| import java.io.PrintWriter; | |
| /** | |
| * Indicates a Lua runtime error. | |
| * | |
| * <p> | |
| * This exception is thrown if a Lua runtime error occurs. The class provides | |
| * access to the Lua stack trace by means of the {@link #getLuaStackTrace()} | |
| * method. | |
| * </p> | |
| */ | |
| public class LuaRuntimeException extends LuaException { | |
| // -- Static | |
| private static final long serialVersionUID = 1L; | |
| private static final LuaStackTraceElement[] EMPTY_LUA_STACK_TRACE = new LuaStackTraceElement[0]; | |
| // -- State | |
| private LuaStackTraceElement[] luaStackTrace; | |
| // -- Construction | |
| /** | |
| * Creates a new instance. The instance is created with an empty Lua stack | |
| * trace. | |
| * | |
| * @param msg | |
| * the message | |
| */ | |
| public LuaRuntimeException(String msg) { | |
| super(msg); | |
| luaStackTrace = EMPTY_LUA_STACK_TRACE; | |
| } | |
| /** | |
| * Creates a new instance. The instance is created with an empty Lua stack | |
| * trace. | |
| * | |
| * @param msg | |
| * the message | |
| * @param cause | |
| * the cause of this exception | |
| */ | |
| public LuaRuntimeException(String msg, Throwable cause) { | |
| super(msg, cause); | |
| luaStackTrace = EMPTY_LUA_STACK_TRACE; | |
| } | |
| /** | |
| * Creates a new instance. The instance is created with an empty Lua stack | |
| * trace. | |
| * | |
| * @param cause | |
| * the cause of this exception | |
| */ | |
| public LuaRuntimeException(Throwable cause) { | |
| super(cause); | |
| luaStackTrace = EMPTY_LUA_STACK_TRACE; | |
| } | |
| // -- Properties | |
| /** | |
| * Returns the Lua stack trace of this runtime exception. | |
| */ | |
| public LuaStackTraceElement[] getLuaStackTrace() { | |
| return luaStackTrace.clone(); | |
| } | |
| // -- Operations | |
| /** | |
| * Prints this exception and its Lua stack trace to the standard error | |
| * stream. | |
| */ | |
| public void printLuaStackTrace() { | |
| printLuaStackTrace(System.err); | |
| } | |
| /** | |
| * Prints this exception and its Lua stack trace to the specified print | |
| * stream. | |
| * | |
| * @param s | |
| * the print stream | |
| */ | |
| public void printLuaStackTrace(PrintStream s) { | |
| synchronized (s) { | |
| s.println(this); | |
| for (int i = 0; i < luaStackTrace.length; i++) { | |
| s.println("\tat " + luaStackTrace[i]); | |
| } | |
| } | |
| } | |
| /** | |
| * Prints this exception and its Lua stack trace to the specified print | |
| * writer. | |
| * | |
| * @param s | |
| * the print writer | |
| */ | |
| public void printLuaStackTrace(PrintWriter s) { | |
| synchronized (s) { | |
| s.println(this); | |
| for (int i = 0; i < luaStackTrace.length; i++) { | |
| s.println("\tat " + luaStackTrace[i]); | |
| } | |
| } | |
| } | |
| // -- Package private methods | |
| /** | |
| * Sets the Lua error in this exception. The method in invoked from the | |
| * native library. | |
| */ | |
| void setLuaError(LuaError luaError) { | |
| initCause(luaError.getCause()); | |
| luaStackTrace = luaError.getLuaStackTrace(); | |
| } | |
| } |