Class ReferenceIndexFiller

java.lang.Object
com.github._1c_syntax.bsl.languageserver.references.ReferenceIndexFiller

@Component public class ReferenceIndexFiller extends Object
Заполнитель индекса ссылок.

Обрабатывает события изменения контекста документов и обновляет индекс ссылок на символы.

  • Constructor Details

  • Method Details

    • handleEvent

      @Order(200) @EventListener public void handleEvent(DocumentContextContentChangedEvent event)
    • handleEvent

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

      При удалении документа очищает все зарегистрированные в индексе ссылки, исходящие из этого документа (вызовы методов, использование переменных и т.д.).

      Parameters:
      event - событие удаления документа
    • handleEvent

      @EventListener public void handleEvent(ConfigurationTypesRegisteredEvent event)
      Переиндексирует self-члены документов после (пере)регистрации конфигурационных типов.

      Проход self-членов в fill(DocumentContext) резолвит их через TypeRegistry: документ, наполненный ДО регистрации типов (либо до их перерегистрации при будущем reload конфигурации), самих self-членов ещё не проиндексировал — здесь их подхватываем, чем и обеспечивается обещанное SelfMemberResolverImpl/ReferenceIndex восстановление подсветки/резолва. Перебираем только уже наполненные документы с self-типом; при обычном порядке (типы регистрируются раньше didOpen) наполненных документов на этот момент ещё нет — обработчик вхолостую.

      Parameters:
      event - событие успешной регистрации конфигурационных типов.
    • fill

      public void fill(DocumentContext documentContext)
      Переиндексировать обращения к символам, расположенные в документе.

      Новый набор вхождений собирается в буфер и применяется атомарной заменой (ReferenceIndex.replaceReferences(URI, Iterable)): конкурентные читатели ни в какой момент не видят «пустой» индекс документа. Если обход AST завершился исключением, прежнее содержимое индекса остаётся нетронутым.