code: @Override
  	public void setData(final Object data) {
  		List<?> options = getOptions();
  		if (!isEditable() && data != null && (options == null || options.isEmpty())) {
  			throw new IllegalStateException(
  					"Should not set selections on a list component with no options.");
  		}
  
  		// Convert data to a list (if necessary)
  		List<?> selected = convertDataToList(data);
  
  		// Validate the selected options
  		List<?> validOptions = findValidOptions(options, selected, false);
  		super.setData(validOptions);
  	}
docs: Sets the data that this component displays/edits.
  <p>
  setData expects the data being passed in to be either null (for no selection) or a {@link List} of selected
  options. If an empty list is passed in, then it will be treated the same as null.
  </p>
  <p>
  If the data is not null and is not a List, then setData will either (1) if the data is an array, convert the
  array to a List or (2) create a List and add the data as the selected option.
  </p>
  <p>
  setData will verify the selected option/s are valid. If a selected option does not exist, then it will throw an
  {@link IllegalArgumentException}.
  </p>
  <p>
  If the list component requires a selection (ie {@link #isAllowNoSelection()} is false) and the data being set is
  null and null is not a valid option, then setData will throw an {@link IllegalArgumentException}.
  </p>
  
  @param data the data to set which is usually a List containing the selected options or null for no selection.
  @throws IllegalArgumentException if the data Object is not null but the options List is null or empty.