Class DocumentChangeExecutor
java.lang.Object
com.github._1c_syntax.bsl.languageserver.context.DocumentChangeExecutor
Управляет последовательной обработкой изменений документа для одного
DocumentContext.
Задачи попадают в приоритетную очередь и выполняются строго в порядке возрастания версии,
что позволяет консистентно накапливать изменения и применять их одним вызовом обработчика.
Дополнительно класс предоставляет барьер awaitLatest(), позволяющий клиентским потокам дождаться
применения всех поставленных изменений и тем самым читать консистентное состояние документа.
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionDocumentChangeExecutor(DocumentContext documentContext, BiFunction<String, List<TextDocumentContentChangeEvent>, String> changeApplier, DocumentChangeExecutor.DocumentChangeListener changeListener, String threadName) Создаёт executor для конкретного документа и запускает рабочий поток. -
Method Summary
Modifier and TypeMethodDescriptionДожидается применения всех изменений, поставленных на момент вызова.booleanawaitTermination(long timeout, TimeUnit unit) Ожидает завершения рабочего потока в течение указанного таймаута.voidshutdown()Завершает работу executor'а, дожидаясь обработки уже поставленных задач.voidНемедленно останавливает executor и очищает очередь.voidsubmit(int version, List<TextDocumentContentChangeEvent> contentChanges) Помещает задачу в очередь на обработку.
-
Constructor Details
-
DocumentChangeExecutor
public DocumentChangeExecutor(DocumentContext documentContext, BiFunction<String, List<TextDocumentContentChangeEvent>, String> changeApplier, DocumentChangeExecutor.DocumentChangeListener changeListener, String threadName) Создаёт executor для конкретного документа и запускает рабочий поток.- Parameters:
documentContext- контекст документа, для которого обрабатываются измененияchangeApplier- функция, применяющая набор изменений к переданному текстуchangeListener- слушатель, вызываемый после накопления изменений и перед rebuildthreadName- префикс имени потока, чтобы упростить отладку
-
-
Method Details
-
submit
Помещает задачу в очередь на обработку.- Parameters:
version- версия документа, полученная от клиента LSPcontentChanges- список изменений, которые необходимо применить
-
shutdown
public void shutdown()Завершает работу executor'а, дожидаясь обработки уже поставленных задач. -
shutdownNow
public void shutdownNow()Немедленно останавливает executor и очищает очередь. -
awaitTermination
Ожидает завершения рабочего потока в течение указанного таймаута.- Parameters:
timeout- длительность ожиданияunit- единица измерения таймаута- Returns:
true, если поток завершился за отведённое время; иначеfalse- Throws:
InterruptedException- если ожидание было прервано
-
awaitLatest
Дожидается применения всех изменений, поставленных на момент вызова.Метод безопасно вызывается из любых потоков: если все изменения уже применены, возвращает немедленно завершённый
CompletableFuture, иначе регистрирует ожидание и завершит его, как только рабочий поток применит соответствующую версию.- Returns:
- future, завершающийся после применения всех накопленных изменений.
-