public abstract class AbstractInterruptibleASTTransformation extends ClassCodeVisitorSupport implements ASTTransformation, org.objectweb.asm.Opcodes
InterruptedException
when
some conditions are met.Modifier and Type | Field and Description |
---|---|
protected boolean |
applyToAllClasses |
protected boolean |
applyToAllMembers |
protected static String |
CHECK_METHOD_START_MEMBER |
protected boolean |
checkOnMethodStart |
protected SourceUnit |
source |
protected static String |
THROWN_EXCEPTION_TYPE |
protected ClassNode |
thrownExceptionType |
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, 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, ASM4, ASM5, 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, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, 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, 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, V1_8
Constructor and Description |
---|
AbstractInterruptibleASTTransformation() |
Modifier and Type | Method and Description |
---|---|
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.
|
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
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
protected static final String CHECK_METHOD_START_MEMBER
protected static final String THROWN_EXCEPTION_TYPE
protected SourceUnit source
protected boolean checkOnMethodStart
protected boolean applyToAllClasses
protected boolean applyToAllMembers
protected ClassNode thrownExceptionType
public AbstractInterruptibleASTTransformation()
protected SourceUnit getSourceUnit()
getSourceUnit
in class ClassCodeVisitorSupport
protected abstract ClassNode type()
protected abstract Expression createCondition()
protected abstract String getErrorMessage()
protected void setupTransform(AnnotationNode node)
public void visit(ASTNode[] nodes, SourceUnit source)
ASTTransformation
visit
in interface ASTTransformation
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.protected static boolean getBooleanAnnotationParameter(AnnotationNode node, String parameterName, boolean defaultValue)
protected static ClassNode getClassAnnotationParameter(AnnotationNode node, String parameterName, ClassNode defaultValue)
protected static void internalError(String message)
protected Statement createInterruptStatement()
protected final Statement wrapBlock(Statement statement)
statement
- the statement to be wrappedblock statement
which first element is for checking interruption, and the
second one the statement to be wrapped.public final void visitForLoop(ForStatement forStatement)
visitForLoop
in interface GroovyCodeVisitor
visitForLoop
in class ClassCodeVisitorSupport
public final void visitDoWhileLoop(DoWhileStatement doWhileStatement)
visitDoWhileLoop
in interface GroovyCodeVisitor
visitDoWhileLoop
in class ClassCodeVisitorSupport
public final void visitWhileLoop(WhileStatement whileStatement)
visitWhileLoop
in interface GroovyCodeVisitor
visitWhileLoop
in class ClassCodeVisitorSupport