@Nullable
  public String getContent() throws VcsException {
    try {
      if (myUseBaseRevision) {
        return ContentRevisionCache.getOrLoadCurrentAsString(
                myVcs.getProject(),
                myFile,
                myVcs.getKeyInstanceMethod(),
                new CurrentRevisionProvider() {
                  @Override
                  public VcsRevisionNumber getCurrentRevision() throws VcsException {
                    return getRevisionNumber();
                  }

                  @Override
                  public Pair<VcsRevisionNumber, byte[]> get() throws VcsException, IOException {
                    return Pair.create(getRevisionNumber(), getUpToDateBinaryContent());
                  }
                })
            .getSecond();
      } else {
        return ContentRevisionCache.getOrLoadAsString(
            myVcs.getProject(),
            myFile,
            getRevisionNumber(),
            myVcs.getKeyInstanceMethod(),
            ContentRevisionCache.UniqueType.REPOSITORY_CONTENT,
            new Throwable2Computable<byte[], VcsException, IOException>() {
              @Override
              public byte[] compute() throws VcsException, IOException {
                return getUpToDateBinaryContent();
              }
            });
      }
    } catch (IOException e) {
      throw new VcsException(e);
    }
  }