Class WorkspaceContextHolder

java.lang.Object
com.github._1c_syntax.bsl.languageserver.infrastructure.WorkspaceContextHolder

public final class WorkspaceContextHolder extends Object
ThreadLocal-хранилище текущего workspace URI и имени. Используется WorkspaceScope для определения ключа scope, а также для именования потоков в per-workspace ForkJoinPool.

URI должен быть нормализован вызывающим кодом перед передачей в set().

Предпочтительный способ использования — через try-with-resources:

try (var ctx = WorkspaceContextHolder.forUri(workspaceUri)) {
  // workspace-scoped proxy beans resolve здесь
}
или через wrap-методы:
WorkspaceContextHolder.run(workspaceUri, () -> {
  // workspace-scoped proxy beans resolve здесь
});

var result = WorkspaceContextHolder.call(workspaceUri, () -> computeResult());
  • Method Details

    • registerWorkspace

      public static void registerWorkspace(URI workspaceUri, String name)
      Зарегистрировать имя workspace для данного URI. После регистрации вызовы forUri(URI) будут использовать это имя.
    • unregisterWorkspace

      public static void unregisterWorkspace(URI workspaceUri)
      Удалить регистрацию workspace.
    • isRegistered

      public static boolean isRegistered(URI workspaceUri)
      Проверить, зарегистрирован ли workspace.
    • forUri

      public static WorkspaceContextHolder.WorkspaceContext forUri(URI workspaceUri, String workspaceName)
      Создать AutoCloseable-контекст workspace с URI и именем. При закрытии восстанавливает предыдущее значение ThreadLocal.
    • forUri

      public static WorkspaceContextHolder.WorkspaceContext forUri(URI workspaceUri)
      Создать AutoCloseable-контекст workspace с URI. Имя извлекается из последнего сегмента пути URI. При закрытии восстанавливает предыдущее значение ThreadLocal.
    • run

      public static void run(URI workspaceUri, Runnable action)
      Выполнить действие в контексте workspace с URI. Имя извлекается из последнего сегмента пути URI. При завершении восстанавливает предыдущее значение ThreadLocal.
    • run

      public static void run(URI workspaceUri, String workspaceName, Runnable action)
      Выполнить действие в контексте workspace с URI и именем. При завершении восстанавливает предыдущее значение ThreadLocal.
    • call

      public static <T> T call(URI workspaceUri, Callable<T> action) throws Exception
      Вычислить значение в контексте workspace с URI. Имя извлекается из последнего сегмента пути URI. При завершении восстанавливает предыдущее значение ThreadLocal.
      Throws:
      Exception
    • call

      public static <T> T call(URI workspaceUri, String workspaceName, Callable<T> action) throws Exception
      Вычислить значение в контексте workspace с URI и именем. При завершении восстанавливает предыдущее значение ThreadLocal.
      Throws:
      Exception
    • set

      public static void set(URI workspaceUri, String workspaceName)
      Установить workspace URI и имя. URI должен быть уже нормализован вызывающим кодом.
    • set

      public static void set(URI workspaceUri)
      Установить workspace URI. Имя берётся из реестра зарегистрированных workspace. URI должен быть уже нормализован и зарегистрирован через registerWorkspace(URI, String).
      Throws:
      IllegalStateException - если workspace не зарегистрирован
    • get

      @Nullable public static URI get()
    • getName

      @Nullable public static String getName()
    • clear

      public static void clear()