code: @Override
  	public Object getValue(ELContext context, Object base, Object property) {
  		if (context == null) {
  			throw new NullPointerException("context is null");
  		}
  		Object result = null;
  		if (isResolvable(base)) {
  			int index = toIndex(null, property);
  			List<?> list = (List<?>) base;
  			result = index < 0 || index >= list.size() ? null : list.get(index);
  			context.setPropertyResolved(true);
  		}
  		return result;
  	}
docs: If the base object is a list, returns the value at the given index. The index is specified by
  the property argument, and coerced into an integer. If the coercion could not be performed,
  an IllegalArgumentException is thrown. If the index is out of bounds, null is returned. If
  the base is a List, the propertyResolved property of the ELContext object must be set to true
  by this resolver, before returning. If this property is not true after this method is called,
  the caller should ignore the return value.
  
  @param context
  The context of this evaluation.
  @param base
  The list to analyze. Only bases of type List are handled by this resolver.
  @param property
  The index of the element in the list to return the acceptable type for. Will be
  coerced into an integer, but otherwise ignored by this resolver.
  @return If the propertyResolved property of ELContext was set to true, then the value at the
  given index or null if the index was out of bounds. Otherwise, undefined.
  @throws PropertyNotFoundException
  if the given index is out of bounds for this list.
  @throws IllegalArgumentException
  if the property could not be coerced into an integer.
  @throws NullPointerException
  if context is null
  @throws ELException
  if an exception was thrown while performing the property or variable resolution.
  The thrown exception must be included as the cause property of this exception, if
  available.