docs: public ELContext getELContext()
      {
          // Do NOT use getCurrentInstance here. For FacesContext decorators that
          // register themselves as "the current instance" that will cause an
          // infinite loop. For FacesContext decorators that do not register
          // themselves as "the current instance", if they are themselves wrapped
          // by a decorator that *does* register itself, then an infinite loop
          // also occurs.
          //
          // As noted above, we really want to do something like
          // ctx = getWrappedInstance();
          // where the subclass can return the object it is delegating to.
          // As there is no such method, however, the best we can do is pass the
          // method call on to the first-registered FacesContext instance. That
          // instance will never be "this", as the real original FacesContext
          // object will provide a proper implementation of this method.
          FacesContext ctx = firstInstance.get();
  
          if (ctx == null)
          {
              throw new NullPointerException(FacesContext.class.getName());
          }
  
          ELContext elctx = ctx.getELContext();
          if (elctx == null)
          {
              throw new UnsupportedOperationException();
          }
  
          return elctx;
      }