@Override
  public @Nullable <T> T getCachedValue(@NotNull UserDataHolder dataHolder,
                                        @NotNull Key<CachedValue<T>> key,
                                        @NotNull CachedValueProvider<T> provider,
                                        boolean trackValue) {
    CachedValue<T> value = dataHolder.getUserData(key);
    if (value instanceof CachedValueBase && ((CachedValueBase<?>)value).isFromMyProject(myProject)) {
      Supplier<T> data = value.getUpToDateOrNull();
      if (data != null) {
        return data.get();
      }
      CachedValueStabilityChecker.checkProvidersEquivalent(provider, value.getValueProvider(), key);
    }
    if (value == null) {
      value = saveInUserData(dataHolder, key, freshCachedValue(dataHolder, key, provider, trackValue));
    }
    return value.getValue();
  }
@Override
  public @Nullable <T> T getCachedValue(@NotNull UserDataHolder dataHolder,
                                        @NotNull Key<CachedValue<T>> key,
                                        @NotNull CachedValueProvider<T> provider,
                                        boolean trackValue)