Package asteroid
Class AbstractLocalTransformation<T extends Annotation,S extends AnnotatedNode>
- java.lang.Object
-
- org.codehaus.groovy.transform.AbstractASTTransformation
-
- asteroid.AbstractLocalTransformation<T,S>
-
- Type Parameters:
T- The annotation type used to mark the transformationS- The annotated node type. It has to be a subtype ofAnnotatedNode. As a rule of thumb think of any type that can be annotated (a method, a type...)
- All Implemented Interfaces:
groovyjarjarasm.asm.Opcodes,ASTTransformation,ErrorCollecting
- Direct Known Subclasses:
PhaseTransformation
public abstract class AbstractLocalTransformation<T extends Annotation,S extends AnnotatedNode> extends AbstractASTTransformation
This class is an abstraction to process certain nodes annotated with a specific annotation node type
Types indicate wich nodes are affected:
Lets say we wanted to build a transformation to transform methods annotated by @MyAnnotation:
In this example transformation will be applied only to thoseclass MyCustomTransformation extends AbstractLocalTransformation<MyAnnotation, MethodNode> { @Override void doVisit(AnnotationNode annotation, final MethodNode annotated){ // implementation } }ASTNodeinstances of typeMethodNodeannotated by @MyAnnotation
Checks:
If you would like to check something before applying the transformation you can use a contract-like programming structure. If you have worked with Spock or GContracts you are already used to it. The idea is to have two blocks withindoVisit(org.codehaus.groovy.ast.AnnotationNode, S)method, one for assertions, the other to call the transformation.
Any expression within the check block will be treated as an assertion statement. If any of the assertion fails the compilation will fail.@Override void doVisit(AnnotationNode annotation, final ClassNode annotated){ check: 'class has correct name' annotated.name == 'MyBusinessService' then: 'we will add a new method' // transformation code }
When using Groovy to implement your transformation. If you annotate your transformation withPhaseyou will benefit of the following:
- No need to implement constructor ()
- No need to provide
GroovyASTTransformation
- Since:
- 0.2.0
-
-
Field Summary
-
Fields inherited from class org.codehaus.groovy.transform.AbstractASTTransformation
RETENTION_CLASSNODE, sourceUnit
-
Fields inherited from interface groovyjarjarasm.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, ASM6, ASM7, ASM8_EXPERIMENTAL, 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, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V9
-
-
Constructor Summary
Constructors Constructor Description AbstractLocalTransformation()Default constructorAbstractLocalTransformation(Class<T> annotation)Default constructor
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract voiddoVisit(AnnotationNode annotation, S annotated)This method processes all annotated nodes annotated with a specific annotation node.voidvisit(ASTNode[] nodes, SourceUnit source)-
Methods inherited from class org.codehaus.groovy.transform.AbstractASTTransformation
addError, checkIncludeExclude, checkIncludeExclude, checkIncludeExcludeUndefinedAware, checkIncludeExcludeUndefinedAware, checkNotInterface, checkPropertyList, checkPropertyList, checkPropertyList, copyAnnotatedNodeAnnotations, copyAnnotatedNodeAnnotations, deemedInternalName, getAnnotationName, getClassList, getMemberClassList, getMemberClassValue, getMemberClassValue, getMemberIntValue, getMemberList, getMemberStringList, getMemberStringValue, getMemberStringValue, getMemberValue, hasAnnotation, init, memberHasValue, nonGeneric, shouldSkip, shouldSkip, shouldSkipOnDescriptor, shouldSkipOnDescriptorUndefinedAware, shouldSkipUndefinedAware, shouldSkipUndefinedAware, tokenize
-
-
-
-
Constructor Detail
-
AbstractLocalTransformation
public AbstractLocalTransformation() throws IllegalAccessExceptionDefault constructor- Throws:
IllegalAccessException- Since:
- 0.2.0
-
-
Method Detail
-
doVisit
public abstract void doVisit(AnnotationNode annotation, S annotated)
This method processes all annotated nodes annotated with a specific annotation node.- Parameters:
annotation- the annotation informationannotated- the ast node annotated with the specific annotation- Since:
- 0.2.0
-
visit
public void visit(ASTNode[] nodes, SourceUnit source)
-
-