docs: @SuppressWarnings("unchecked")
  	public <T> List<T> find(Class<T> type, Object locator, boolean required) throws ReferenceException {
  		if (type == null)
  			throw new NullPointerException("Type cannot be null");
  		if (locator == null)
  			throw new NullPointerException("Locator cannot be null");
  
  		List<T> components = new ArrayList<T>();
  
  		synchronized (_lock) {
  			// Search all references
  			for (int index = _references.size() - 1; index >= 0; index--) {
  				Reference reference = _references.get(index);
  				if (reference.match(locator)) {
  					Object component = reference.getComponent();
  					if (type.isInstance(component)) {
  						components.add((T) component);
  					}
  				}
  			}
  		}
  
  		if (components.size() == 0 && required) {
  			throw new ReferenceException(null, locator);
  		}
  
  		return components;
  	}