code: public boolean isReadOnly(ELContext context,
                                Object base,
                                Object property) {
  
          if (context == null) {
              throw new NullPointerException();
          }
  
          if (base != null && base.getClass().isArray()) {
              context.setPropertyResolved(true);
              int index = toInteger (property);
              if (index < 0 || index >= Array.getLength(base)) {
                  throw new PropertyNotFoundException();
              }
          }
          return isReadOnly;
      }
docs: If the base object is a Java language array, returns whether a call to
  {@link #setValue} will always fail.
  
  <p>If the base is a Java language array, the
  <code>propertyResolved</code> property of the <code>ELContext</code>
  object must be set to <code>true</code> by this resolver, before
  returning. If this property is not <code>true</code> after this method
  is called, the caller should ignore the return value.</p>
  
  <p>If this resolver was constructed in read-only mode, this method will
  always return <code>true</code>. Otherwise, it returns
  <code>false</code>.</p>
  
  @param context The context of this evaluation.
  @param base The array to analyze. Only bases that are a Java language
  array are handled by this resolver.
  @param property The index of the element in the array to return the
  acceptable type for. Will be coerced into an integer, but
  otherwise ignored by this resolver.
  @return If the <code>propertyResolved</code> property of
  <code>ELContext</code> was set to <code>true</code>, then
  <code>true</code> if calling the <code>setValue</code> method
  will always fail or <code>false</code> if it is possible that
  such a call may succeed; otherwise undefined.
  @throws PropertyNotFoundException if the given index is out of
  bounds for this array.
  @throws NullPointerException if context is <code>null</code>
  @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.