code: @Override
  	public void addListener(ChangeListener<? super T> listener) {
  		Objects.requireNonNull(listener);
  		if (size == 0) {
  			sentinel = false;
  			this.listener = listener;
  			this.value = getValue();
  		} else if (size == 1) {
  			sentinel = false;
  			this.listener = new Object[]{this.listener, listener};
  		} else {
  			Object[] l = (Object[]) this.listener;
  			if (l.length <= size + 1) { // test for sentinel not required as we put the new listener behind this.size, thus it won't be fired
  				sentinel = false;
  				l = Arrays.copyOf(l, l.length * 3 / 2 + 1);
  				this.listener = l;
  			}
  			l[size] = listener;
  		}
  		if (invalidationSize == size) {
  			this.value = getValue();
  		}
  		size++;
  	}
docs: {@inheritDoc}