/** * * This file is a part of ZOOLA - an extensible BeanShell implementation. * Zoola is based on original BeanShell code created by Pat Niemeyer. * * Original BeanShell code is Copyright (C) 2000 Pat Niemeyer <pat@pat.net>. * * New portions are Copyright 2012 Rafal Lewczuk <rafal.lewczuk@jitlogic.com> * * This is free software. You can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This software is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with ZOOLA. If not, see <http://www.gnu.org/licenses/>. * */ package bsh; import bsh.ast.SimpleNode; /** UtilEvalError is an error corresponding to an EvalError but thrown by a utility or other class that does not have the caller context (Node) available to it. A normal EvalError must supply the caller Node in order for error messages to be pinned to the correct line and location in the script. UtilEvalError is a checked exception that is *not* a subtype of EvalError, but instead must be caught and rethrown as an EvalError by the a nearest location with context. The method toEvalError( Node ) should be used to throw the EvalError, supplying the node. <p> To summarize: Utilities throw UtilEvalError. ASTs throw EvalError. ASTs catch UtilEvalError and rethrow it as EvalError using toEvalError( Node ). <p> Philosophically, EvalError and UtilEvalError corrospond to RuntimeException. However they are constrained in this way in order to add the context for error reporting. @see UtilTargetError */ public class UtilEvalError extends Exception { protected UtilEvalError() { } public UtilEvalError( String s ) { super(s); } public UtilEvalError( String s, Throwable cause ) { super(s,cause); } /** Re-throw as an eval error, prefixing msg to the message and specifying the node. If a node already exists the addNode is ignored. @see #setNode(bsh.ast.SimpleNode) <p> @param msg may be null for no additional message. */ public EvalError toEvalError( String msg, SimpleNode node, CallStack callstack ) { if ( Interpreter.DEBUG ) printStackTrace(); if ( msg == null ) msg = ""; else msg = msg + ": "; return new EvalError( msg+getMessage(), node, callstack, this ); } public EvalError toEvalError ( SimpleNode node, CallStack callstack ) { return toEvalError( null, node, callstack ); } }