synchronized DocumentArchive get() throws FileNotFoundException {
      if (mArchive != null) {
        return mArchive;
      }

      try {
        if (mLocalFile != null) {
          mArchive =
              DocumentArchive.createForLocalFile(
                  mProvider.getContext(),
                  mLocalFile,
                  mId.mArchiveId,
                  mIdDelimiter,
                  mNotificationUri);
        } else {
          mArchive =
              DocumentArchive.createForParcelFileDescriptor(
                  mProvider.getContext(),
                  mProvider.openDocument(mId.mArchiveId, "r", null /* signal */),
                  mId.mArchiveId,
                  mIdDelimiter,
                  mNotificationUri);
        }
      } catch (IOException e) {
        throw new IllegalStateException(e);
      }

      return mArchive;
    }