code: public <Value> PushMeasure<Value> wrapMeasure(
  			final PushMeasure<Value> wrapped) {
  		if (wrapped == null) {
  			throw new IllegalArgumentException("No measure provided");
  		} else {
  			@SuppressWarnings("unchecked")
  			PushMeasure<Value> wrapper = (PushMeasure<Value>) measureCache
  					.get(wrapped);
  
  			if (wrapper == null) {
  				wrapper = new PushMeasure<Value>() {
  
  					@Override
  					public String getName() {
  						return wrapped.getName();
  					}
  
  					@Override
  					public String getDescription() {
  						return wrapped.getDescription();
  					}
  
  					@Override
  					public void register(MeasureListener<Value> listener) {
  						wrapped.register(wrapListener(listener));
  					}
  
  					@Override
  					public void unregister(MeasureListener<Value> listener) {
  						wrapped.unregister(wrapListener(listener));
  					}
  				};
  				measureCache.put(wrapped, wrapper);
  			} else {
  				// reuse existing one
  			}
  
  			return wrapper;
  		}
  	}
docs: This method wrap a {@link PushMeasure} (the wrapped) into another one
  (the wrapper). Any {@link MeasureListener} registered to the wrapper will
  be automatically wrapped via {@link #wrapListener(MeasureListener)}. This
  allows to ensure that any {@link MeasureListener} registered will be
  considered, independently of who registers it or when it is registered.<br/>
  <br/>
  The wrapped measure is not changed, thus it can be reused to register
  {@link MeasureListener}s that we don't want to consider. If a wrapper has
  already been made for the given wrapped, it will be returned and no new
  one will be instantiated (weak references are used to not keep in memory
  the unused wrappers).
  
  @param wrapped
  the {@link PushMeasure} to wrap
  @return the {@link PushMeasure} wrapper
  @throw {@link IllegalArgumentException} if no measure is provided