Class ServerContextProvider

java.lang.Object
com.github._1c_syntax.bsl.languageserver.context.ServerContextProvider

@Component public class ServerContextProvider extends Object
Провайдер контекстов сервера для мульти-workspace окружения.

Управляет коллекцией экземпляров ServerContext (по одному на каждую workspace folder) и обеспечивает маршрутизацию от URI документа к контексту сервера.

  • Constructor Details

  • Method Details

    • addWorkspace

      public ServerContext addWorkspace(WorkspaceFolder workspaceFolder)
      Добавить workspace folder и создать для нее контекст сервера.
      Parameters:
      workspaceFolder - информация о workspace folder
      Returns:
      созданный контекст сервера
    • addWorkspace

      public ServerContext addWorkspace(URI workspaceUri)
      Добавить workspace по URI и создать для нее контекст сервера.
      Parameters:
      workspaceUri - URI корня workspace
      Returns:
      созданный контекст сервера
    • addWorkspace

      public ServerContext addWorkspace(URI workspaceUri, @Nullable String workspaceName)
      Добавить workspace по URI и создать для нее контекст сервера.
      Parameters:
      workspaceUri - URI корня workspace
      workspaceName - имя workspace (если null — извлекается из URI)
      Returns:
      созданный контекст сервера
    • removeWorkspace

      public void removeWorkspace(WorkspaceFolder workspaceFolder)
      Удалить workspace folder и очистить ее контекст сервера.
      Parameters:
      workspaceFolder - информация о workspace folder
    • getServerContextUnsafe

      public Optional<ServerContext> getServerContextUnsafe(URI documentUri)
      Получить контекст сервера для URI документа (с нормализацией URI).

      Используется для внешних вызовов, где URI может быть не нормализован.

      Parameters:
      documentUri - URI документа (будет нормализован)
      Returns:
      контекст сервера, содержащий документ, или пустой Optional, если не найден
    • getServerContext

      public Optional<ServerContext> getServerContext(URI documentUri)
      Получить контекст сервера для URI документа.

      Сначала ищет в индексе документов (O(1)), затем по URI workspace (для новых документов). URI должен быть уже нормализован через Absolute.uri(URI). Используется Absolute.uri(URI) для канонизации, что работает со всеми схемами URI.

      Parameters:
      documentUri - нормализованный URI документа
      Returns:
      контекст сервера, содержащий документ, или пустой Optional, если не найден
    • getDocumentUnsafe

      public Optional<DocumentContext> getDocumentUnsafe(String uri)
      Получить документ по строковому URI с нормализацией.

      Ищет документ во всех зарегистрированных контекстах. Используется для внешних вызовов, где URI может быть не нормализован.

      Parameters:
      uri - строковый URI документа
      Returns:
      Контекст документа, если найден
    • getDocumentUnsafe

      public Optional<DocumentContext> getDocumentUnsafe(URI uri)
      Получить документ по URI с нормализацией.

      Ищет документ во всех зарегистрированных контекстах. Используется для внешних вызовов, где URI может быть не нормализован.

      Parameters:
      uri - URI документа (будет нормализован)
      Returns:
      Контекст документа, если найден
    • getDocument

      public Optional<DocumentContext> getDocument(URI uri)
      Получить документ по нормализованному URI.

      URI должен быть уже нормализован через Absolute.uri(URI).

      Parameters:
      uri - нормализованный URI документа
      Returns:
      Контекст документа, если найден
    • getAllContexts

      public Map<URI, ServerContext> getAllContexts()
      Получить все контексты серверов с их URI.
      Returns:
      неизменяемая карта URI → контекст сервера
    • clear

      public void clear()
      Очистить все workspaces.
    • onDocumentAdded

      @EventListener public void onDocumentAdded(ServerContextDocumentAddedEvent event)
      Обработчик события добавления документа в контекст. Добавляет документ в индекс для быстрого поиска.
    • onDocumentRemoved

      @EventListener public void onDocumentRemoved(ServerContextDocumentRemovedEvent event)
      Обработчик события удаления документа из контекста. Удаляет документ из индекса.