Class ConfigurationFileSystemWatcher
Мониторит глобальный файл конфигурации и файлы конфигурации каждого workspace.
При обнаружении изменения (удаление, создание, редактирование) делегирует обработку в
ConfigurationFileChangeListener.
-
Constructor Summary
ConstructorsConstructorDescriptionConfigurationFileSystemWatcher(GlobalLanguageServerConfiguration globalConfiguration, ConfigurationFileChangeListener listener) -
Method Summary
Modifier and TypeMethodDescriptionvoidОбработчик удаления workspace (перед удалением).voidОбработчик событияGlobalLanguageServerConfigurationChangedEvent.voidОбработчик добавления нового workspace.voidinit()voidvoidwatch()Фоновая процедура, отслеживающая изменения файлов.
-
Constructor Details
-
ConfigurationFileSystemWatcher
@ConstructorProperties({"globalConfiguration","listener"}) public ConfigurationFileSystemWatcher(GlobalLanguageServerConfiguration globalConfiguration, ConfigurationFileChangeListener listener)
-
-
Method Details
-
init
- Throws:
IOException
-
onDestroy
- Throws:
IOException
-
watch
Фоновая процедура, отслеживающая изменения файлов.Java NIO
WatchService.registerдля уже зарегистрированной директории возвращает тот жеWatchKey(см. javadoc); поэтомуglobalWatchKeyиworkspaceWatchKeys.get(uri)могут быть физически одним и тем же объектом, когда workspace LSC при init подтянул настройки из глобального файла иconfigurationFileworkspace указывает на ту же директорию. В таком случае «два listener'а на один файл» нельзя реализовать через два независимых ключа: первыйpollEvents()consume-ит события у другого.Решение — диспатч по файлу: один проход по уникальным ключам, события каждого ключа распределяются между всеми заинтересованными listener'ами (global + workspace LSC, у которых файл совпадает с
LanguageServerConfiguration.getConfigurationFile()). -
handleGlobalConfigurationChanged
@EventListener public void handleGlobalConfigurationChanged(GlobalLanguageServerConfigurationChangedEvent event) Обработчик событияGlobalLanguageServerConfigurationChangedEvent.- Parameters:
event- Событие
-
handleWorkspaceAdded
Обработчик добавления нового workspace.Workspace-контекст уже установлен в
EventPublisherAspectперед публикациейWorkspaceAddedEvent, поэтому прямое обращение к workspace-scoped прокси черезevent.getServerContext().getLanguageServerConfiguration()корректно.- Parameters:
event- Событие добавления workspace
-
handleBeforeWorkspaceRemoved
Обработчик удаления workspace (перед удалением).- Parameters:
event- Событие удаления workspace
-