Program: 81145
Project: 81145
Buggy source:
/** 
 * Creates the JavaFX property and three methods for accessing the property and a pair of getter/setter methods for accessing the original (now synthetic) Groovy property.  For example, if the original property was "String firstName" then these three methods would be generated: <p> public String getFirstName() public void setFirstName(String value) public StringProperty firstNameProperty()
 * @param classNode    The declaring class in which the property will appear
 * @param originalProp The original Groovy property
 */
private void createPropertyGetterSetter(ClassNode classNode,PropertyNode originalProp){
  Expression initExp=originalProp.getInitialExpression();
  originalProp.getField().setInitialValueExpression(null);
  PropertyNode fxProperty=createFXProperty(originalProp);
  List<AnnotationNode> methodAnnotations=new ArrayList<>();
  List<AnnotationNode> fieldAnnotations=new ArrayList<>();
  for (  AnnotationNode annotation : originalProp.getField().getAnnotations()) {
    if (FXOBSERVABLE_CNODE.equals(annotation.getClassNode()))     continue;
    Class annotationClass=annotation.getClassNode().getTypeClass();
    Target target=(Target)annotationClass.getAnnotation(Target.class);
    if (isTargetAllowed(target,ElementType.METHOD)) {
      methodAnnotations.add(annotation);
    }
 else     if (isTargetAllowed(target,ElementType.FIELD)) {
      fieldAnnotations.add(annotation);
    }
  }
  String getterName="String_Node_Str" + MetaClassHelper.capitalize(originalProp.getName());
  if (classNode.getMethods(getterName).isEmpty()) {
    Statement getterBlock=createGetterStatement(createFXProperty(originalProp));
    createGetterMethod(classNode,originalProp,getterName,getterBlock,methodAnnotations);
    methodAnnotations=null;
  }
 else {
    wrapGetterMethod(classNode,originalProp.getName(),methodAnnotations);
    methodAnnotations=null;
  }
  String setterName="String_Node_Str" + MetaClassHelper.capitalize(originalProp.getName());
  if (classNode.getMethods(setterName).isEmpty()) {
    Statement setterBlock=createSetterStatement(createFXProperty(originalProp));
    createSetterMethod(classNode,originalProp,setterName,setterBlock,methodAnnotations);
  }
 else {
    wrapSetterMethod(classNode,originalProp.getName(),methodAnnotations);
  }
  FieldNode fxFieldShortName=createFieldNodeCopy(originalProp.getName() + "String_Node_Str",null,fxProperty.getField());
  createPropertyAccessor(classNode,createFXProperty(originalProp),fxFieldShortName,initExp);
  classNode.removeField(originalProp.getName());
  classNode.addField(fxFieldShortName);
  fxFieldShortName.addAnnotations(fieldAnnotations);
}

Fixed version (ground truth):
/** 
 * Creates the JavaFX property and three methods for accessing the property and a pair of getter/setter methods for accessing the original (now synthetic) Groovy property.  For example, if the original property was "String firstName" then these three methods would be generated: <p> public String getFirstName() public void setFirstName(String value) public StringProperty firstNameProperty()
 * @param classNode    The declaring class in which the property will appear
 * @param originalProp The original Groovy property
 */
private void createPropertyGetterSetter(ClassNode classNode,PropertyNode originalProp){
  Expression initExp=originalProp.getInitialExpression();
  originalProp.getField().setInitialValueExpression(null);
  PropertyNode fxProperty=createFXProperty(originalProp);
  List<AnnotationNode> methodAnnotations=new ArrayList<>();
  List<AnnotationNode> fieldAnnotations=new ArrayList<>();
  for (  AnnotationNode annotation : originalProp.getField().getAnnotations()) {
    if (FXOBSERVABLE_CNODE.equals(annotation.getClassNode())) {
      continue;
    }
    Class annotationClass=annotation.getClassNode().getTypeClass();
    Target target=(Target)annotationClass.getAnnotation(Target.class);
    if (isTargetAllowed(target,ElementType.METHOD)) {
      methodAnnotations.add(annotation);
    }
 else     if (isTargetAllowed(target,ElementType.FIELD)) {
      fieldAnnotations.add(annotation);
    }
  }
  String getterName="String_Node_Str" + MetaClassHelper.capitalize(originalProp.getName());
  if (classNode.getMethods(getterName).isEmpty()) {
    Statement getterBlock=createGetterStatement(createFXProperty(originalProp));
    createGetterMethod(classNode,originalProp,getterName,getterBlock,methodAnnotations);
    methodAnnotations=null;
  }
 else {
    wrapGetterMethod(classNode,originalProp.getName(),methodAnnotations);
    methodAnnotations=null;
  }
  String setterName="String_Node_Str" + MetaClassHelper.capitalize(originalProp.getName());
  if (classNode.getMethods(setterName).isEmpty()) {
    Statement setterBlock=createSetterStatement(createFXProperty(originalProp));
    createSetterMethod(classNode,originalProp,setterName,setterBlock,methodAnnotations);
  }
 else {
    wrapSetterMethod(classNode,originalProp.getName(),methodAnnotations);
  }
  FieldNode fxFieldShortName=createFieldNodeCopy(originalProp.getName() + "String_Node_Str",null,fxProperty.getField());
  createPropertyAccessor(classNode,createFXProperty(originalProp),fxFieldShortName,initExp);
  classNode.removeField(originalProp.getName());
  classNode.addField(fxFieldShortName);
  fxFieldShortName.addAnnotations(fieldAnnotations);
}