code: boolean setObserver(Observer observer) { // F16043
          boolean success;
          Observer oldObserver;
  
          synchronized (this) {
              oldObserver = ivObserver;
              success = oldObserver != null || !isDone();
              ivObserver = success ? observer : null;
          }
  
          if (oldObserver != null) {
              oldObserver.update(null, observer);
          }
          return success;
      }
docs: Sets the current observer and updates the pending one. If the result is
  already available, the existing observer if any will be updated and
  passed the new observer as data. Otherwise, the observer will be updated
  when the result is available and will be passed null as data.
  
  @param observer the new observer
  @return true if the observer was set, or false if the result is available