@Contract(value = "_, _, _ -> new", pure = true)
  static <T> @NotNull Pointer<T> fileRangePointer(
    @NotNull PsiFile file,
    @NotNull TextRange rangeInFile,
    @NotNull BiFunction<? super @NotNull PsiFile, ? super @NotNull TextRange, ? extends @Nullable T> restoration
  ) {
    SmartPsiFileRange base = SmartPointerManager.getInstance(file.getProject()).createSmartPsiFileRangePointer(file, rangeInFile);
    return new FileRangePointer<>(base, restoration);
  }
@Contract(value = "_, _, _ -> new", pure = true)
  static <T> @NotNull Pointer<T> fileRangePointer(
    @NotNull PsiFile file,
    @NotNull TextRange rangeInFile,
    @NotNull BiFunction<? super @NotNull PsiFile, ? super @NotNull TextRange, ? extends @Nullable T> restoration
  )