code: public int add(T item) {
  		final String sourceMethod = "add"; //$NON-NLS-1$
  		if (item == null) {
  			throw new NullPointerException();
  		}
  		Lock lock = null;
  		int idx = index.getAndIncrement();
  		lock = (idx >= items.length) ? rwl.writeLock() : rwl.readLock();
  		SignalUtil.lock(lock, sourceClass, sourceMethod);
  		try {
  			if (idx >= items.length) {
  				int newLength = items.length;
  				while (idx >= newLength) { newLength*=2; }
  				items = Arrays.copyOf(items, newLength);
  			}
  			items[idx] = item;
  		} finally {
  			lock.unlock();
  		}
  		return idx;
  	}
docs: Adds the specified element to the builder.
  <p>
  Blocking on add operations only occurs when the list array needs to be grown.
  
  @param item
  The item to add
  @return the index in the list to which the item was added
  @throws NullPointerException
  on attempt to add null to the list