code: @Override
      public void setValue(ELContext context, Object base, Object property,
                           Object value) {
          if (context == null) {
              throw new NullPointerException();
          }
  
          if (base == null && property instanceof String) {
              String beanName = (String) property;
              if (beanNameResolver.isNameResolved(beanName) ||
                      beanNameResolver.canCreateBean(beanName)) {
                  beanNameResolver.setBeanValue(beanName, value);
                  context.setPropertyResolved(base, property);
              }
          }
      }
docs: If the base is null and the property is a name that is resolvable by
  the BeanNameResolver, the bean in the BeanNameResolver is set to the
  given value.
  
  <p>If the name is resolvable by the BeanNameResolver, or if the
  BeanNameResolver allows creating a new bean,
  the <code>propertyResolved</code> property of the
  <code>ELContext</code> object must be set to <code>true</code>
  by the resolver, before returning. If this property is not
  <code>true</code> after this method is called, the caller can
  safely assume no value has been set.</p>
  
  @param context The context of this evaluation.
  @param base <code>null</code>
  @param property The name of the bean
  @param value The value to set the bean with the given name to.
  @throws NullPointerException if context is <code>null</code>
  @throws PropertyNotWritableException if the BeanNameResolver does not
  allow the bean to be modified.
  @throws ELException if an exception was thrown while attempting to
  set the bean with the given name.  The thrown exception
  must be included as the cause property of this exception, if
  available.