org.codehaus.groovy.transform
Class AbstractInterruptibleASTTransformation

java.lang.Object
  extended by org.codehaus.groovy.ast.CodeVisitorSupport
      extended by org.codehaus.groovy.ast.ClassCodeVisitorSupport
          extended by org.codehaus.groovy.transform.AbstractInterruptibleASTTransformation
All Implemented Interfaces:
GroovyClassVisitor, GroovyCodeVisitor, ASTTransformation, org.objectweb.asm.Opcodes

public abstract class AbstractInterruptibleASTTransformation
extends ClassCodeVisitorSupport
implements ASTTransformation, org.objectweb.asm.Opcodes

Base class for AST Transformations which will automatically throw an InterruptedException when some conditions are met.

Since:
1.8.0
Author:
Cedric Champeau, Hamlet D'Arcy

Field Summary
protected  boolean applyToAllClasses
           
protected static String CHECK_METHOD_START_MEMBER
           
protected  boolean checkOnMethodStart
           
protected static String PROPAGATE_TO_COMPILE_UNIT
           
protected  SourceUnit source
           
protected static String THROWN_EXCEPTION_TYPE
           
protected  ClassNode thrownExceptionType
           
 
Fields inherited from interface org.objectweb.asm.Opcodes
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, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, 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, INTEGER, INVOKEDYNAMIC, INVOKEDYNAMIC_OWNER, 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, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, 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, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
 
Constructor Summary
AbstractInterruptibleASTTransformation()
           
 
Method Summary
protected abstract  Expression createCondition()
          Subclasses should implement this method to set the condition of the interruption statement
protected  Statement createInterruptStatement()
           
protected static boolean getBooleanAnnotationParameter(AnnotationNode node, String parameterName, boolean defaultValue)
           
protected static ClassNode getClassAnnotationParameter(AnnotationNode node, String parameterName, ClassNode defaultValue)
           
protected abstract  String getErrorMessage()
          Subclasses should implement this method to provide good error resolution.
protected  SourceUnit getSourceUnit()
           
protected static void internalError(String message)
           
protected  void setupTransform(AnnotationNode node)
           
protected abstract  ClassNode type()
           
 void visit(ASTNode[] nodes, SourceUnit source)
          The method is invoked when an AST Transformation is active.
 void visitDoWhileLoop(DoWhileStatement doWhileStatement)
           
 void visitForLoop(ForStatement forStatement)
           
 void visitWhileLoop(WhileStatement whileStatement)
           
protected  Statement wrapBlock(Statement statement)
          Takes a statement and wraps it into a block statement which first element is the interruption check statement.
 
Methods inherited from class org.codehaus.groovy.ast.ClassCodeVisitorSupport
addError, visitAnnotations, visitAssertStatement, visitBlockStatement, visitBreakStatement, visitCaseStatement, visitCatchStatement, visitClass, visitClassCodeContainer, visitConstructor, visitConstructorOrMethod, visitContinueStatement, visitDeclarationExpression, visitExpressionStatement, visitField, visitIfElse, visitImports, visitMethod, visitObjectInitializerStatements, visitPackage, visitProperty, visitReturnStatement, visitStatement, visitSwitch, visitSynchronizedStatement, visitThrowStatement, visitTryCatchFinally
 
Methods inherited from class org.codehaus.groovy.ast.CodeVisitorSupport
visitArgumentlistExpression, visitArrayExpression, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBooleanExpression, visitBytecodeExpression, visitCastExpression, visitClassExpression, visitClosureExpression, visitClosureListExpression, visitConstantExpression, visitConstructorCallExpression, visitEmptyStatement, visitFieldExpression, visitGStringExpression, visitListExpression, visitListOfExpressions, visitMapEntryExpression, visitMapExpression, visitMethodCallExpression, visitMethodPointerExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitPropertyExpression, visitRangeExpression, visitShortTernaryExpression, visitSpreadExpression, visitSpreadMapExpression, visitStaticMethodCallExpression, visitTernaryExpression, visitTupleExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpression
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CHECK_METHOD_START_MEMBER

protected static final String CHECK_METHOD_START_MEMBER
See Also:
Constant Field Values

PROPAGATE_TO_COMPILE_UNIT

protected static final String PROPAGATE_TO_COMPILE_UNIT
See Also:
Constant Field Values

THROWN_EXCEPTION_TYPE

protected static final String THROWN_EXCEPTION_TYPE
See Also:
Constant Field Values

source

protected SourceUnit source

checkOnMethodStart

protected boolean checkOnMethodStart

applyToAllClasses

protected boolean applyToAllClasses

thrownExceptionType

protected ClassNode thrownExceptionType
Constructor Detail

AbstractInterruptibleASTTransformation

public AbstractInterruptibleASTTransformation()
Method Detail

getSourceUnit

protected SourceUnit getSourceUnit()
Specified by:
getSourceUnit in class ClassCodeVisitorSupport

type

protected abstract ClassNode type()

createCondition

protected abstract Expression createCondition()
Subclasses should implement this method to set the condition of the interruption statement


getErrorMessage

protected abstract String getErrorMessage()
Subclasses should implement this method to provide good error resolution.


setupTransform

protected void setupTransform(AnnotationNode node)

visit

public void visit(ASTNode[] nodes,
                  SourceUnit source)
Description copied from interface: ASTTransformation
The method is invoked when an AST Transformation is active. For local transformations, it is invoked once each time the local annotation is encountered. For global transformations, it is invoked once for every source unit, which is typically a source file.

Specified by:
visit in interface ASTTransformation
Parameters:
nodes - The ASTnodes when the call was triggered. Element 0 is the AnnotationNode that triggered this annotation to be activated. Element 1 is the AnnotatedNode decorated, such as a MethodNode or ClassNode. For global transformations it is usually safe to ignore this parameter.
source - The source unit being compiled. The source unit may contain several classes. For global transformations, information about the AST can be retrieved from this object.

getBooleanAnnotationParameter

protected static boolean getBooleanAnnotationParameter(AnnotationNode node,
                                                       String parameterName,
                                                       boolean defaultValue)

getClassAnnotationParameter

protected static ClassNode getClassAnnotationParameter(AnnotationNode node,
                                                       String parameterName,
                                                       ClassNode defaultValue)

internalError

protected static void internalError(String message)

createInterruptStatement

protected Statement createInterruptStatement()
Returns:
Returns the interruption check statement.

wrapBlock

protected final Statement wrapBlock(Statement statement)
Takes a statement and wraps it into a block statement which first element is the interruption check statement.

Parameters:
statement - the statement to be wrapped
Returns:
a block statement which first element is for checking interruption, and the second one the statement to be wrapped.

visitForLoop

public final void visitForLoop(ForStatement forStatement)
Specified by:
visitForLoop in interface GroovyCodeVisitor
Overrides:
visitForLoop in class ClassCodeVisitorSupport

visitDoWhileLoop

public final void visitDoWhileLoop(DoWhileStatement doWhileStatement)
Specified by:
visitDoWhileLoop in interface GroovyCodeVisitor
Overrides:
visitDoWhileLoop in class ClassCodeVisitorSupport

visitWhileLoop

public final void visitWhileLoop(WhileStatement whileStatement)
Specified by:
visitWhileLoop in interface GroovyCodeVisitor
Overrides:
visitWhileLoop in class ClassCodeVisitorSupport

Copyright © 2003-2012 The Codehaus. All rights reserved.