code: @MainThread
      public <S> void addSource(@NonNull LiveData<S> source, @NonNull Observer<S> onChanged) {
          Source<S> e = new Source<>(source, onChanged);
          Source<?> existing = mSources.putIfAbsent(source, e);
          if (existing != null && existing.mObserver != onChanged) {
              throw new IllegalArgumentException(
                      "This source was already added with the different observer");
          }
          if (existing != null) {
              return;
          }
          if (hasActiveObservers()) {
              e.plug();
          }
      }
docs: Starts to listen the given {@code source} LiveData, {@code onChanged} observer will be called
  when {@code source} value was changed.
  <p>
  {@code onChanged} callback will be called only when this {@code MediatorLiveData} is active.
  <p> If the given LiveData is already added as a source but with a different Observer,
  {@link IllegalArgumentException} will be thrown.
  
  @param <S>       The type of data hold by {@code source} LiveData
  @param source    the {@code LiveData} to listen to
  @param onChanged The observer that will receive the events