public static <E extends PsiElement, T> T getProjectPsiDependentCache(@NotNull E context, @NotNull Function<? super E, ? extends T> provider) {
    return getCachedValue(context, getKeyForClass(provider.getClass(), globalKeyForProvider), () -> {
      CachedValueProvider.Result<? extends T> result = CachedValueProvider.Result.create(
        provider.apply(context), PsiModificationTracker.MODIFICATION_COUNT);
      CachedValueProfiler.onResultCreated(result, provider);
      return result;
    });
  }
public static <E extends PsiElement, T> T getProjectPsiDependentCache(@NotNull E context, @NotNull Function<? super E, ? extends T> provider)