@NotNull
  @Override
  public List<ReferringObject> getReferringObjects(@NotNull EvaluationContextImpl evaluationContext,
                                                   @NotNull ObjectReference value,
                                                   long limit) throws EvaluateException {
    if (myCachedRequests.containsKey(value)) {
      return myCachedRequests.get(value).getReferringObjects(value, limit);
    }

    for (ReferringObjectsInfo provider : myCachedRequests.values()) {
      if (provider.hasReferringObjectsFor(value)) {
        return provider.getReferringObjects(value, limit);
      }
    }

    MemoryAgent memoryAgent = MemoryAgent.get(evaluationContext);
    if (memoryAgent.isDisabled()) {
      return myDefaultProvider.getReferringObjects(evaluationContext, value, myObjectsToRequestLimit);
    }

    ReferringObjectsInfo roots = getPathsToGcRoots(memoryAgent, evaluationContext, value);
    myCachedRequests.put(value, roots);
    return roots.getReferringObjects(value, limit);
  }
@NotNull
  @Override
  public List<ReferringObject> getReferringObjects(@NotNull EvaluationContextImpl evaluationContext,
                                                   @NotNull ObjectReference value,
                                                   long limit)