Package groovy.beans
Class BindableASTTransformation
- java.lang.Object
- 
- groovy.beans.BindableASTTransformation
 
- 
- All Implemented Interfaces:
- ASTTransformation,- org.objectweb.asm.Opcodes
 - Direct Known Subclasses:
- VetoableASTTransformation
 
 public class BindableASTTransformation extends java.lang.Object implements ASTTransformation, org.objectweb.asm.Opcodes Handles generation of code for the@Bindableannotation when@Vetoableis not present.Generally, it adds (if needed) a PropertyChangeSupport field and the needed add/removePropertyChangeListener methods to support the listeners. It also generates the setter and wires the setter through the PropertyChangeSupport. If a Vetoableannotation is detected it does nothing and lets theVetoableASTTransformationhandle all the changes.
- 
- 
Field SummaryFields Modifier and Type Field Description protected static ClassNodeboundClassNode- 
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 BindableASTTransformation()
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddPropertyChangeSupport(ClassNode declaringClass)Adds the necessary field and methods to support property change support.protected StatementcreateBindableStatement(PropertyNode propertyNode, Expression fieldExpression)Creates a statement body similar to:this.firePropertyChange("field", field, field = value)protected voidcreateSetterMethod(ClassNode declaringClass, PropertyNode propertyNode, java.lang.String setterName, Statement setterBlock)Creates a setter method with the given body.static booleanhasBindableAnnotation(AnnotatedNode node)Convenience method to see if an annotated node is@Bindable.protected booleanneedsPropertyChangeSupport(ClassNode declaringClass, SourceUnit sourceUnit)Snoops through the declaring class and all parents looking for methodsvoid addPropertyChangeListener(PropertyChangeListener),void removePropertyChangeListener(PropertyChangeListener), andvoid firePropertyChange(String, Object, Object).voidvisit(ASTNode[] nodes, SourceUnit source)Handles the bulk of the processing, mostly delegating to other methods.
 
- 
- 
- 
Field Detail- 
boundClassNodeprotected static ClassNode boundClassNode 
 
- 
 - 
Method Detail- 
hasBindableAnnotationpublic static boolean hasBindableAnnotation(AnnotatedNode node) Convenience method to see if an annotated node is@Bindable.- Parameters:
- node- the node to check
- Returns:
- true if the node is bindable
 
 - 
visitpublic void visit(ASTNode[] nodes, SourceUnit source) Handles the bulk of the processing, mostly delegating to other methods.- Specified by:
- visitin interface- ASTTransformation
- Parameters:
- nodes- the ast nodes
- source- the source unit for the nodes
 
 - 
createBindableStatementprotected Statement createBindableStatement(PropertyNode propertyNode, Expression fieldExpression) Creates a statement body similar to:this.firePropertyChange("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
 
 - 
createSetterMethodprotected void createSetterMethod(ClassNode declaringClass, PropertyNode propertyNode, java.lang.String setterName, Statement setterBlock) Creates a setter method with the given body.- 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
 
 - 
needsPropertyChangeSupportprotected boolean needsPropertyChangeSupport(ClassNode declaringClass, SourceUnit sourceUnit) Snoops through the declaring class and all parents looking for methodsvoid addPropertyChangeListener(PropertyChangeListener),void removePropertyChangeListener(PropertyChangeListener), andvoid firePropertyChange(String, Object, Object). If any are defined all must be defined or a compilation error results.- Parameters:
- declaringClass- the class to search
- sourceUnit- the source unit, for error reporting.- @NotNull.
- Returns:
- true if property change support should be added
 
 - 
addPropertyChangeSupportprotected void addPropertyChangeSupport(ClassNode declaringClass) Adds the necessary field and methods to support property change support.Adds a new field: protected final java.beans.PropertyChangeSupport this$PropertyChangeSupport = new java.beans.PropertyChangeSupport(this)"Also adds support methods: public void addPropertyChangeListener(java.beans.PropertyChangeListener)public void addPropertyChangeListener(String, java.beans.PropertyChangeListener)public void removePropertyChangeListener(java.beans.PropertyChangeListener)public void removePropertyChangeListener(String, java.beans.PropertyChangeListener)public java.beans.PropertyChangeListener[] getPropertyChangeListeners()- Parameters:
- declaringClass- the class to which we add the support field and methods
 
 
- 
 
-