|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectgroovy.beans.BindableASTTransformation
groovy.beans.VetoableASTTransformation
public class VetoableASTTransformation
Handles generation of code for the @Vetoable
annotation, and @Bindable
if also present.
Bindable
annotaton is detected it also adds support similar
to what BindableASTTransformation
would do.
Field Summary | |
---|---|
protected static ClassNode |
constrainedClassNode
|
protected ClassNode |
vcsClassNode
|
Fields inherited from class groovy.beans.BindableASTTransformation |
---|
boundClassNode, pcsClassNode |
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, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, 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, 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, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, 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, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6 |
Constructor Summary | |
---|---|
VetoableASTTransformation()
|
Method Summary | |
---|---|
private void |
addListenerToClass(SourceUnit source,
AnnotationNode node,
ClassNode classNode)
|
private void |
addListenerToProperty(SourceUnit source,
AnnotationNode node,
AnnotatedNode parent)
|
protected void |
addVetoableChangeSupport(ClassNode declaringClass)
Adds the necessary field and methods to support vetoable change support. |
protected Statement |
createConstrainedStatement(PropertyNode propertyNode,
Expression fieldExpression)
Creates a statement body silimar to: this.fireVetoableChange("field", field, field = value) |
private void |
createListenerSetter(SourceUnit source,
AnnotationNode node,
boolean bindable,
ClassNode declaringClass,
PropertyNode propertyNode)
|
protected Statement |
createSetStatement(Expression fieldExpression)
Creates a statement body similar to: field = value
Used when the field is not also @Bindable |
protected void |
createSetterMethod(ClassNode declaringClass,
PropertyNode propertyNode,
java.lang.String setterName,
Statement setterBlock)
Creates a setter method with the given body. |
static boolean |
hasVetoableAnnotation(AnnotatedNode node)
Convenience method to see if an annotated node is @Vetoable . |
protected boolean |
needsVetoableChangeSupport(ClassNode declaringClass,
SourceUnit sourceUnit)
Snoops through the declaring class and all parents looking for a field of type VetoableChangeSupport. |
void |
visit(ASTNode[] nodes,
SourceUnit source)
Handles the bulk of the processing, mostly delegating to other methods. |
private void |
wrapSetterMethod(ClassNode classNode,
boolean bindable,
java.lang.String propertyName)
Wrap an existing setter. |
Methods inherited from class groovy.beans.BindableASTTransformation |
---|
addPropertyChangeSupport, createBindableStatement, hasBindableAnnotation, needsPropertyChangeSupport |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static ClassNode constrainedClassNode
protected ClassNode vcsClassNode
Constructor Detail |
---|
public VetoableASTTransformation()
Method Detail |
---|
public static boolean hasVetoableAnnotation(AnnotatedNode node)
@Vetoable
.
node
- the node to check
public void visit(ASTNode[] nodes, SourceUnit source)
visit
in interface ASTTransformation
visit
in class BindableASTTransformation
nodes
- the AST nodessource
- the source unit for the nodesprivate void addListenerToProperty(SourceUnit source, AnnotationNode node, AnnotatedNode parent)
private void addListenerToClass(SourceUnit source, AnnotationNode node, ClassNode classNode)
private void wrapSetterMethod(ClassNode classNode, boolean bindable, java.lang.String propertyName)
private void createListenerSetter(SourceUnit source, AnnotationNode node, boolean bindable, ClassNode declaringClass, PropertyNode propertyNode)
protected Statement createConstrainedStatement(PropertyNode propertyNode, Expression fieldExpression)
this.fireVetoableChange("field", field, field = value)
propertyNode
- the field node for the propertyfieldExpression
- a field expression for setting the property value
protected Statement createSetStatement(Expression fieldExpression)
field = value
Used when the field is not also @Bindable
fieldExpression
- a field expression for setting the property value
protected boolean needsVetoableChangeSupport(ClassNode declaringClass, SourceUnit sourceUnit)
declaringClass
- the class to search
protected void createSetterMethod(ClassNode declaringClass, PropertyNode propertyNode, java.lang.String setterName, Statement setterBlock)
createSetterMethod
in class BindableASTTransformation
declaringClass
- the class to which we will add the setterpropertyNode
- the field to back the settersetterName
- the name of the settersetterBlock
- the statement representing the setter blockprotected void addVetoableChangeSupport(ClassNode declaringClass)
"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()
declaringClass
- the class to which we add the support field and methods
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |