org.codehaus.aspectwerkz.transform.inlining.compiler
Class RuntimeCheckVisitor

java.lang.Object
  extended by org.codehaus.aspectwerkz.expression.ExpressionVisitor
      extended by org.codehaus.aspectwerkz.transform.inlining.compiler.RuntimeCheckVisitor
All Implemented Interfaces:
ExpressionParserVisitor, org.objectweb.asm.Constants

public class RuntimeCheckVisitor
extends ExpressionVisitor
implements org.objectweb.asm.Constants

Visit an expression and push on the bytecode stack the boolean expression that corresponds to the residual part for the target(CALLEE) filtering and cflow / cflowbelow runtime checks

TODO: for now OR / AND / NOT are turned in IAND etc, ie "&" and not "&&" that is more efficient but is using labels.

Note: we have to override here (and maintain) every visit Method that visit a node that appears in an expression (f.e. set , get, etc, but not ASTParameter), since we cannot rely on AND/OR/NOT nodes to push the boolean expressions.

Author:
Alexandre Vasseur

Field Summary
 
Fields inherited from class org.codehaus.aspectwerkz.expression.ExpressionVisitor
m_expression, m_namespace, m_root
 
Fields inherited from interface org.objectweb.asm.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, V1_1, V1_2, V1_3, V1_4, V1_5
 
Constructor Summary
RuntimeCheckVisitor(AbstractJoinPointCompiler compiler, org.objectweb.asm.CodeVisitor cv, ExpressionInfo info, boolean isOptimizedJoinPoint, int joinPointIndex, int calleeIndex)
          Create a new visitor given a specific AdviceInfo
 
Method Summary
 void pushCheckOnStack(ExpressionContext context)
          Push the boolean typed expression on the stack.
 Object visit(ASTAnd node, Object data)
           
 Object visit(ASTArgs node, Object data)
           
 Object visit(ASTCall node, Object data)
           
 Object visit(ASTCflowBelow node, Object data)
           
 Object visit(ASTCflow node, Object data)
           
 Object visit(ASTExecution node, Object data)
           
 Object visit(ASTGet node, Object data)
           
 Object visit(ASTHandler node, Object data)
           
 Object visit(ASTHasField node, Object data)
           
 Object visit(ASTHasMethod node, Object data)
           
 Object visit(ASTNot node, Object data)
           
 Object visit(ASTOr node, Object data)
          Handles OR expression
 Object visit(ASTPointcutReference node, Object data)
           
 Object visit(ASTSet node, Object data)
           
 Object visit(ASTStaticInitialization node, Object data)
           
 Object visit(ASTTarget node, Object data)
           
 Object visit(ASTThis node, Object data)
           
 Object visit(ASTWithinCode node, Object data)
           
 Object visit(ASTWithin node, Object data)
           
 
Methods inherited from class org.codehaus.aspectwerkz.expression.ExpressionVisitor
getASTRoot, getExpressionInfo, match, matchUndeterministic, toString, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitAnnotatedNode, visitAttributes, visitModifiers, visitParameters
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RuntimeCheckVisitor

public RuntimeCheckVisitor(AbstractJoinPointCompiler compiler,
                           org.objectweb.asm.CodeVisitor cv,
                           ExpressionInfo info,
                           boolean isOptimizedJoinPoint,
                           int joinPointIndex,
                           int calleeIndex)
Create a new visitor given a specific AdviceInfo

Parameters:
compiler - we are working for
cv - of the method block we are compiling
info - expression info
isOptimizedJoinPoint -
joinPointIndex -
Method Detail

pushCheckOnStack

public void pushCheckOnStack(ExpressionContext context)
Push the boolean typed expression on the stack.

Parameters:
context -

visit

public Object visit(ASTOr node,
                    Object data)
Handles OR expression

Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor
Parameters:
node -
data -
Returns:

visit

public Object visit(ASTAnd node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTNot node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTTarget node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTThis node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTCflow node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTCflowBelow node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTArgs node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTPointcutReference node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTExecution node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTCall node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTSet node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTGet node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTHandler node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTStaticInitialization node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTWithin node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTWithinCode node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTHasMethod node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor

visit

public Object visit(ASTHasField node,
                    Object data)
Specified by:
visit in interface ExpressionParserVisitor
Overrides:
visit in class ExpressionVisitor


Copyright © 2002-2005 Jonas Bonér, Alexandre Vasseur. All Rights Reserved.