docs: protected void addPropertyChangeSupport(ClassNode declaringClass) {
          ClassNode pcsClassNode = ClassHelper.make(PropertyChangeSupport.class);
          ClassNode pclClassNode = ClassHelper.make(PropertyChangeListener.class);
          //String pcsFieldName = "this$propertyChangeSupport";
  
          // add field:
          // protected final PropertyChangeSupport this$propertyChangeSupport = new java.beans.PropertyChangeSupport(this)
          FieldNode pcsField = declaringClass.addField(
                  "this$propertyChangeSupport",
                  ACC_FINAL | ACC_PRIVATE | ACC_SYNTHETIC,
                  pcsClassNode,
                  ctorX(pcsClassNode, args(varX("this"))));
  
          // add method:
          // void addPropertyChangeListener(listener) {
          //     this$propertyChangeSupport.addPropertyChangeListener(listener)
          //  }
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "addPropertyChangeListener",
                          ACC_PUBLIC,
                          ClassHelper.VOID_TYPE,
                          params(param(pclClassNode, "listener")),
                          ClassNode.EMPTY_ARRAY,
                          stmt(callX(fieldX(pcsField), "addPropertyChangeListener", args(varX("listener", pclClassNode))))));
  
          // add method:
          // void addPropertyChangeListener(name, listener) {
          //     this$propertyChangeSupport.addPropertyChangeListener(name, listener)
          //  }
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "addPropertyChangeListener",
                          ACC_PUBLIC,
                          ClassHelper.VOID_TYPE,
                          params(param(ClassHelper.STRING_TYPE, "name"), param(pclClassNode, "listener")),
                          ClassNode.EMPTY_ARRAY,
                          stmt(callX(fieldX(pcsField), "addPropertyChangeListener", args(varX("name", ClassHelper.STRING_TYPE), varX("listener", pclClassNode))))));
  
          // add method:
          // boolean removePropertyChangeListener(listener) {
          //    return this$propertyChangeSupport.removePropertyChangeListener(listener);
          // }
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "removePropertyChangeListener",
                          ACC_PUBLIC,
                          ClassHelper.VOID_TYPE,
                          params(param(pclClassNode, "listener")),
                          ClassNode.EMPTY_ARRAY,
                          stmt(callX(fieldX(pcsField), "removePropertyChangeListener", args(varX("listener", pclClassNode))))));
  
          // add method: void removePropertyChangeListener(name, listener)
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "removePropertyChangeListener",
                          ACC_PUBLIC,
                          ClassHelper.VOID_TYPE,
                          params(param(ClassHelper.STRING_TYPE, "name"), param(pclClassNode, "listener")),
                          ClassNode.EMPTY_ARRAY,
                          stmt(callX(fieldX(pcsField), "removePropertyChangeListener", args(varX("name", ClassHelper.STRING_TYPE), varX("listener", pclClassNode))))));
  
          // add method:
          // void firePropertyChange(String name, Object oldValue, Object newValue) {
          //     this$propertyChangeSupport.firePropertyChange(name, oldValue, newValue)
          //  }
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "firePropertyChange",
                          ACC_PUBLIC,
                          ClassHelper.VOID_TYPE,
                          params(param(ClassHelper.STRING_TYPE, "name"), param(ClassHelper.OBJECT_TYPE, "oldValue"), param(ClassHelper.OBJECT_TYPE, "newValue")),
                          ClassNode.EMPTY_ARRAY,
                          stmt(callX(fieldX(pcsField), "firePropertyChange", args(varX("name", ClassHelper.STRING_TYPE), varX("oldValue"), varX("newValue"))))));
  
          // add method:
          // PropertyChangeListener[] getPropertyChangeListeners() {
          //   return this$propertyChangeSupport.getPropertyChangeListeners
          // }
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "getPropertyChangeListeners",
                          ACC_PUBLIC,
                          pclClassNode.makeArray(),
                          Parameter.EMPTY_ARRAY,
                          ClassNode.EMPTY_ARRAY,
                          returnS(callX(fieldX(pcsField), "getPropertyChangeListeners"))));
  
          // add method:
          // PropertyChangeListener[] getPropertyChangeListeners(String name) {
          //   return this$propertyChangeSupport.getPropertyChangeListeners(name)
          // }
          addGeneratedMethod(declaringClass,
                  new MethodNode(
                          "getPropertyChangeListeners",
                          ACC_PUBLIC,
                          pclClassNode.makeArray(),
                          params(param(ClassHelper.STRING_TYPE, "name")),
                          ClassNode.EMPTY_ARRAY,
                          returnS(callX(fieldX(pcsField), "getPropertyChangeListeners", args(varX("name", ClassHelper.STRING_TYPE))))));
      }