Class ReferenceIndexFiller
Обрабатывает события изменения контекста документов и обновляет индекс ссылок на символы.
-
Constructor Summary
ConstructorsConstructorDescriptionReferenceIndexFiller(ReferenceIndex index, LanguageServerConfiguration configuration, OScriptLibraryIndex oScriptLibraryIndex, GlobalScopeProvider globalScopeProvider, SelfMemberResolver selfMemberResolver) -
Method Summary
Modifier and TypeMethodDescriptionvoidfill(DocumentContext documentContext) Переиндексировать обращения к символам, расположенные в документе.voidПереиндексирует self-члены документов после (пере)регистрации конфигурационных типов.voidvoidvoidОбрабатывает событие удаления документа из контекста сервера.
-
Constructor Details
-
ReferenceIndexFiller
@ConstructorProperties({"index","configuration","oScriptLibraryIndex","globalScopeProvider","selfMemberResolver"}) public ReferenceIndexFiller(ReferenceIndex index, LanguageServerConfiguration configuration, OScriptLibraryIndex oScriptLibraryIndex, GlobalScopeProvider globalScopeProvider, SelfMemberResolver selfMemberResolver)
-
-
Method Details
-
handleEvent
-
handleEvent
@Order(200) @EventListener public void handleEvent(DocumentContextConfigurationBindingChangedEvent event) -
handleEvent
Обрабатывает событие удаления документа из контекста сервера.При удалении документа очищает все зарегистрированные в индексе ссылки, исходящие из этого документа (вызовы методов, использование переменных и т.д.). Если контекст очищается целиком, индекс очищается разом при первом таком событии.
- Parameters:
event- событие удаления документа
-
handleEvent
Переиндексирует self-члены документов после (пере)регистрации конфигурационных типов.Проход self-членов в
fill(DocumentContext)резолвит их черезTypeRegistry: документ, наполненный ДО регистрации типов (либо до их перерегистрации при будущем reload конфигурации), самих self-членов ещё не проиндексировал — здесь их подхватываем, чем и обеспечивается обещанноеSelfMemberResolverImpl/ReferenceIndexвосстановление подсветки/резолва. Перебираем только уже наполненные документы с self-типом.Типы регистрируются в фоне, и к концу регистрации документы уже могут быть наполнены, а часть из них — и освобождена. Документ с текстом наполняется заново под своей блокировкой на чтение; у освобождённого снимается отметка о наполнении, чтобы следующий разбор, даже того же текста, наполнил его заново: перечитывать файл ради одних ссылок здесь не стоит.
- Parameters:
event- событие успешной регистрации конфигурационных типов.
-
fill
Переиндексировать обращения к символам, расположенные в документе.Новый набор вхождений собирается в буфер и применяется атомарной заменой (
ReferenceIndex.replaceReferences(URI, Iterable)): конкурентные читатели ни в какой момент не видят «пустой» индекс документа. Если обход AST завершился исключением, прежнее содержимое индекса остаётся нетронутым.
-