public static <T> void applyForRandomCheck(@NotNull T data, @NotNull Object provider, @NotNull Computable<? extends T> recomputeValue) {
    if (areRandomChecksEnabled() && shouldPerformRandomCheck()) {
      RecursionGuard.StackStamp stamp = RecursionManager.markStack();
      AtomicInteger prevNesting = ourRandomCheckNesting.get();
      prevNesting.incrementAndGet();
      try {
        T fresh = recomputeValue.compute();
        if (stamp.mayCacheNow()) {
          checkEquivalence(data, fresh, provider.getClass(), recomputeValue);
        }
      }
      finally {
        prevNesting.decrementAndGet();
      }
    }
  }
public static <T> void applyForRandomCheck(@NotNull T data, @NotNull Object provider, @NotNull Computable<? extends T> recomputeValue)