|  | /* | 
|  | * $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(); | 
|  | } | 
|  | } |