Class VetoableASTTransformation
- java.lang.Object
- 
- groovy.beans.BindableASTTransformation
- 
- groovy.beans.VetoableASTTransformation
 
 
- 
- All Implemented Interfaces:
- ASTTransformation,- org.objectweb.asm.Opcodes
 
 public class VetoableASTTransformation extends BindableASTTransformation Handles generation of code for the@Vetoableannotation, and@Bindableif also present.Generally, it adds (if needed) a VetoableChangeSupport field and the needed add/removeVetoableChangeListener methods to support the listeners. It also generates the setter and wires the setter through the VetoableChangeSupport. If a Bindableannotation is detected it also adds support similar to whatBindableASTTransformationwould do.
- 
- 
Field SummaryFields Modifier and Type Field Description protected static ClassNodeconstrainedClassNode- 
Fields inherited from class groovy.beans.BindableASTTransformationboundClassNode
 - 
Fields inherited from interface org.objectweb.asm.OpcodesAALOAD, 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_RECORD, 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, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, 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, V16, V17, V18, V19, V20, V21, V9
 
- 
 - 
Constructor SummaryConstructors Constructor Description VetoableASTTransformation()
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddVetoableChangeSupport(ClassNode declaringClass)Adds the necessary field and methods to support vetoable change support.protected StatementcreateConstrainedStatement(PropertyNode propertyNode, Expression fieldExpression)Creates a statement body similar to:this.fireVetoableChange("field", field, field = value)protected StatementcreateSetStatement(Expression fieldExpression)Creates a statement body similar to:field = value.protected voidcreateSetterMethod(ClassNode declaringClass, PropertyNode propertyNode, java.lang.String setterName, Statement setterBlock)Creates a setter method with the given body.static booleanhasVetoableAnnotation(AnnotatedNode node)Convenience method to see if an annotated node is@Vetoable.protected booleanneedsVetoableChangeSupport(ClassNode declaringClass, SourceUnit sourceUnit)Snoops through the declaring class and all parents looking for a field of type VetoableChangeSupport.voidvisit(ASTNode[] nodes, SourceUnit source)Handles the bulk of the processing, mostly delegating to other methods.- 
Methods inherited from class groovy.beans.BindableASTTransformationaddPropertyChangeSupport, createBindableStatement, hasBindableAnnotation, needsPropertyChangeSupport
 
- 
 
- 
- 
- 
Field Detail- 
constrainedClassNodeprotected static ClassNode constrainedClassNode 
 
- 
 - 
Method Detail- 
hasVetoableAnnotationpublic static boolean hasVetoableAnnotation(AnnotatedNode node) Convenience method to see if an annotated node is@Vetoable.- Parameters:
- node- the node to check
- Returns:
- true if the node is constrained
 
 - 
visitpublic void visit(ASTNode[] nodes, SourceUnit source) Handles the bulk of the processing, mostly delegating to other methods.- Specified by:
- visitin interface- ASTTransformation
- Overrides:
- visitin class- BindableASTTransformation
- Parameters:
- nodes- the AST nodes
- source- the source unit for the nodes
 
 - 
createConstrainedStatementprotected Statement createConstrainedStatement(PropertyNode propertyNode, Expression fieldExpression) Creates a statement body similar to:this.fireVetoableChange("field", field, field = value)- Parameters:
- propertyNode- the field node for the property
- fieldExpression- a field expression for setting the property value
- Returns:
- the created statement
 
 - 
createSetStatementprotected Statement createSetStatement(Expression fieldExpression) Creates a statement body similar to:field = value.Used when the field is not also @Bindable.- Parameters:
- fieldExpression- a field expression for setting the property value
- Returns:
- the created statement
 
 - 
needsVetoableChangeSupportprotected boolean needsVetoableChangeSupport(ClassNode declaringClass, SourceUnit sourceUnit) Snoops through the declaring class and all parents looking for a field of type VetoableChangeSupport. Remembers the field and returns false if found otherwise returns true to indicate that such support should be added.- Parameters:
- declaringClass- the class to search
- Returns:
- true if vetoable change support should be added
 
 - 
createSetterMethodprotected void createSetterMethod(ClassNode declaringClass, PropertyNode propertyNode, java.lang.String setterName, Statement setterBlock) Creates a setter method with the given body.This differs from normal setters in that we need to add a declared exception java.beans.PropertyVetoException - Overrides:
- createSetterMethodin class- BindableASTTransformation
- Parameters:
- declaringClass- the class to which we will add the setter
- propertyNode- the field to back the setter
- setterName- the name of the setter
- setterBlock- the statement representing the setter block
 
 - 
addVetoableChangeSupportprotected void addVetoableChangeSupport(ClassNode declaringClass) Adds the necessary field and methods to support vetoable change support.Adds a new field: "protected final java.beans.VetoableChangeSupport this$vetoableChangeSupport = new java.beans.VetoableChangeSupport(this)"Also adds support methods: public void addVetoableChangeListener(java.beans.VetoableChangeListener)public void addVetoableChangeListener(String, java.beans.VetoableChangeListener)public void removeVetoableChangeListener(java.beans.VetoableChangeListener)public void removeVetoableChangeListener(String, java.beans.VetoableChangeListener)public java.beans.VetoableChangeListener[] getVetoableChangeListeners()- Parameters:
- declaringClass- the class to which we add the support field and methods
 
 
- 
 
-