public ListMergeStatus check(final CommittedChangeList list, final boolean ignoreEnabled) {
      if (!enabledAndGettersFilled(ignoreEnabled)) {
        return ListMergeStatus.ALIEN;
      }

      if (!(list instanceof SvnChangeList)) {
        return ListMergeStatus.ALIEN;
      }

      final MergeinfoCached cachedState = getCurrentCache();
      if (cachedState != null) {
        if (cachedState.getCopyRevision() != -1
            && cachedState.getCopyRevision() >= list.getNumber()) {
          return ListMergeStatus.COMMON;
        }
        final SvnMergeInfoCache17.MergeCheckResult result =
            cachedState.getMap().get(list.getNumber());
        return convert(result, true);
      } else {
        final MergeinfoCached state =
            myMergeInfoCache.getCachedState(myRootGetter.get(), myWcPathGetter.get());
        if (state == null) {
          refresh(ignoreEnabled);
          return ListMergeStatus.REFRESHING;
        } else {
          if (state.getCopyRevision() != -1 && state.getCopyRevision() >= list.getNumber()) {
            return ListMergeStatus.COMMON;
          }
          return convert(state.getMap().get(list.getNumber()), false);
        }
      }
    }
  @Nullable
  public CommittedChangeListsListener createRefresher(final boolean ignoreEnabled) {
    if (refreshEnabled(ignoreEnabled)) {
      // on awt thread
      final MergeinfoCached state =
          myMergeInfoCache.getCachedState(myRootGetter.get(), myWcPathGetter.get());
      myCachedMap.put(
          createKey(myRootGetter.get(), myBranchGetter.get()),
          (state == null)
              ? new MergeinfoCached()
              : new MergeinfoCached(
                  new HashMap<Long, SvnMergeInfoCache17.MergeCheckResult>(state.getMap()),
                  state.getCopyRevision()));
      myMergeInfoCache.clear(myRootGetter.get(), myWcPathGetter.get());

      return new MyRefresher();
    }
    return null;
  }