@Override
  public @NotNull <T, P> ParameterizedCachedValue<T, P> createParameterizedCachedValue(@NotNull UserDataHolder userDataHolder,
                                                                                       @NotNull ParameterizedCachedValueProvider<T, P> provider,
                                                                                       boolean trackValue) {
    if (preferHardRefsForPsiCachedValue
        && userDataHolder instanceof PsiElement
        && !(userDataHolder instanceof PsiFile)) { // PsiFile cache may outlive the loaded content of file
      return new PsiParameterizedCachedValue.Direct<>(myManager, provider, trackValue);
    }

    return createParameterizedCachedValue(provider, trackValue);
  }
@Override
  public @NotNull <T, P> ParameterizedCachedValue<T, P> createParameterizedCachedValue(@NotNull UserDataHolder userDataHolder,
                                                                                       @NotNull ParameterizedCachedValueProvider<T, P> provider,
                                                                                       boolean trackValue)