code: protected void onAttributeValueChanged(String attributeName, Object value) {
          if (!attributeListeners.containsKey(attributeName)) {
              return;
          }
          List<AttributeListener> listeners = attributeListeners.get(attributeName);
          synchronized (listeners) {
              for (AttributeListener listener : listeners) {
                  listener.attributeValueChanged(value);
              }
          }
      }
docs: Called by generated {@code <Interface>AbstractProvider} classes to notify
  all registered listeners about the attribute change.
  <p>
  NOTE: Provider implementations should _not_ call this method but use
  attribute specific {@code <Interface>AbstractProvider.<attribute>Changed}
  methods.
  
  @param attributeName the attribute name as defined in the Franca model.
  @param value         the new value of the changed attribute.