org.jboss.byteman.rule.expression
Class ThrowExpression
java.lang.Object
org.jboss.byteman.rule.RuleElement
org.jboss.byteman.rule.expression.Expression
org.jboss.byteman.rule.expression.ThrowExpression
public class ThrowExpression
- extends Expression
Expression which implements a throw from a rule action but only where the thrown exception is
declared by the trigger method or is a runtime exception which does nto need ot be declared
Method Summary |
void |
bind()
verify that variables mentioned in this expression are actually available in the supplied
bindings list and infer/validate the type of this expression or its subexpressions
where possible |
private void |
checkThrownTypeIsValid()
check that it is legitimate to throw an exception of the type computed for this expression from the
trtiggering method. |
void |
compile(MethodVisitor mv,
CompileContext compileContext)
|
java.lang.Class<?>[] |
createParamTypes(java.lang.String descriptor,
java.lang.ClassLoader loader)
|
java.lang.Class |
getCandidateArgClass(java.util.List<java.lang.reflect.Constructor> candidates,
int argIdx)
|
private java.lang.String |
getDescriptor()
|
java.lang.Object |
interpret(HelperAdapter helper)
evaluate the expression by interpreting the expression tree |
java.util.List<java.lang.reflect.Constructor> |
pruneCandidates(java.util.List<java.lang.reflect.Constructor> candidates,
int argIdx,
java.lang.Class argClazz)
|
Type |
typeCheck(Type expected)
ensure that all type references in the expression and its component expressions
can be resolved, that the type of the expression is well-defined and that it is
compatible with the type expected in the context in which it occurs. |
void |
writeTo(java.io.StringWriter stringWriter)
|
Methods inherited from class org.jboss.byteman.rule.RuleElement |
compileBooleanConversion, compileBox, compileNumericConversion, compileObjectConversion, compilePrimitiveConversion, compileStringConversion, compileTypeConversion, compileUnbox, getBindings, getTypeGroup, toString |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
typeName
private java.lang.String typeName
arguments
private java.util.List<Expression> arguments
argumentTypes
private java.util.List<Type> argumentTypes
paramTypes
private java.util.List<Type> paramTypes
constructor
private java.lang.reflect.Constructor constructor
ThrowExpression
public ThrowExpression(Rule rule,
ParseNode token,
java.util.List<Expression> arguments)
bind
public void bind()
throws TypeException
- verify that variables mentioned in this expression are actually available in the supplied
bindings list and infer/validate the type of this expression or its subexpressions
where possible
- Specified by:
bind
in class Expression
- Throws:
TypeException
typeCheck
public Type typeCheck(Type expected)
throws TypeException
- ensure that all type references in the expression and its component expressions
can be resolved, that the type of the expression is well-defined and that it is
compatible with the type expected in the context in which it occurs.
- Specified by:
typeCheck
in class Expression
- Parameters:
expected
- the type expected for the expression in the contxt in which it occurs. this
may be void but shoudl not be undefined at the point where type checking is performed.
- Returns:
-
- Throws:
TypeException
getCandidateArgClass
public java.lang.Class getCandidateArgClass(java.util.List<java.lang.reflect.Constructor> candidates,
int argIdx)
pruneCandidates
public java.util.List<java.lang.reflect.Constructor> pruneCandidates(java.util.List<java.lang.reflect.Constructor> candidates,
int argIdx,
java.lang.Class argClazz)
interpret
public java.lang.Object interpret(HelperAdapter helper)
throws ExecuteException
- evaluate the expression by interpreting the expression tree
- Specified by:
interpret
in class Expression
- Parameters:
helper
- an execution context associated with the rule whcih contains a map of
current bindings for rule variables and another map of their declared types both of which
are indexed by varoable name. This includes entries for the helper (name "-1"), the
recipient if the trigger method is not static (name "0") and the trigger method arguments
(names "1", ...)
- Returns:
- the result of evaluation as an Object
- Throws:
ExecuteException
compile
public void compile(MethodVisitor mv,
CompileContext compileContext)
throws CompileException
- Specified by:
compile
in class RuleElement
- Throws:
CompileException
getDescriptor
private java.lang.String getDescriptor()
writeTo
public void writeTo(java.io.StringWriter stringWriter)
- Specified by:
writeTo
in class Expression
checkThrownTypeIsValid
private void checkThrownTypeIsValid()
throws TypeWarningException,
TypeException
- check that it is legitimate to throw an exception of the type computed for this expression from the
trtiggering method. if the computed type is a subtype of runtime exception then it is valid whatever
the trigger method. if the computed type or one of its super types is declared by the trigger method
as a checked exception then it is valid. if no such declaration is found then a typeexception is raised.
However, in the case of an overriding rule whose target class includes a version of the method which
does declares the exception a type warning exception is raised as this is not strictly an error. See
issue BYTEMAN-156 for an explanation.
- Throws:
TypeWarningException
- if it is not legitimate to throw a value of the computed type from the
trigger method but it is legitimate to throw a value of this type from the rule target method.
TypeException
- if it is otherwise not legitimate to throw a value of the computed type from the trigger
method
createParamTypes
public java.lang.Class<?>[] createParamTypes(java.lang.String descriptor,
java.lang.ClassLoader loader)
throws TypeException
- Throws:
TypeException