docs: public void addListeners(PropertyChangeListener listener, Object newObject, Set updateSet) {
          removeListeners();
          if (newObject != null) {
              // check for local synthetics
              TriggerBinding syntheticTrigger = getSyntheticTriggerBinding(newObject);
              MetaClass mc = InvokerHelper.getMetaClass(newObject);
              if (syntheticTrigger != null) {
                  PropertyBinding psb = new PropertyBinding(newObject, propertyName);
                  PropertyChangeProxyTargetBinding proxytb = new PropertyChangeProxyTargetBinding(newObject, propertyName, listener);
  
                  syntheticFullBinding = syntheticTrigger.createBinding(psb, proxytb);
                  syntheticFullBinding.bind();
                  updateSet.add(newObject);
              } else if (!mc.respondsTo(newObject, "addPropertyChangeListener", NAME_PARAMS).isEmpty()) {
                  InvokerHelper.invokeMethod(newObject, "addPropertyChangeListener", new Object[] {propertyName, listener});
                  localListener = listener;
                  updateSet.add(newObject);
              } else if (!mc.respondsTo(newObject, "addPropertyChangeListener", GLOBAL_PARAMS).isEmpty()) {
                  InvokerHelper.invokeMethod(newObject, "addPropertyChangeListener", listener);
                  globalListener = listener;
                  updateSet.add(newObject);
              }
          }
          currentObject = newObject;
      }